2015-02-11 168 views
0

我在螞蟻很新的,我有以下問題創造的build.xml文件處理的.jar文件以下單級應用的創建:如何將.jar依賴包含到ANT目標中,以生成我的應用程序的最終.jar文件?

import java.sql.*; 
import java.util.TimeZone; 

public class Main { 

    public static void main(String[] args) { 
     System.out.println("Hello World !!!"); 

     System.out.println(args.length); 

     if(args.length != 0) { 
      String partitaIVA = args[0]; 
      String nomePDF = args[1]; 
     } 

     Connection conn = null; 
     Statement stmt = null; 

     try { 
      Class.forName ("oracle.jdbc.OracleDriver"); 

      TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT+2"); 
      TimeZone.setDefault(timeZone); 

      // Step 1: Allocate a database "Connection" object 
      conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XXX.XXX:1521:eme1", "myUserName", "myPswd"); // Oracle DB driver 

      System.out.println("After obtained connection with DB"); 

     } catch(SQLException ex) { 
      ex.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 
    } 
} 

,你可以看到的行爲主要是()方法非常簡單,此時只能獲得與Oracle數據庫(由連接對象表示)的連接。

要獲取連接,請使用這個類oracle.jdbc.OracleDriver代表Oracle DB Driver。這個類包含在一個名爲的ojdbc6.jar的jar文件中,該文件放在我的項目的lib文件夾中。

所以我有以下項目結構:

**edi-sta** (the project root) 
    | 
    |----> **lib** 
    |   | 
    |   |-------> **ojdbc6.jar** 
    | 
    |----> **src** 
    |   | 
    |   |-------> **Main.java** 
    | 
    |----> **build.xml** 

所以我創造了這個的build.xml文件

<project name="edi-sta"> 

    <description> 
     EDI-STA 
    </description> 

    <!-- ========================================================================= --> 
    <!-- === Project Paths ======================================================= --> 
    <!-- ========================================================================= --> 

    <property name="project.base.dir" value="."/> 

    <!-- ========================================================================= --> 
    <!-- === DO NOT EDIT BELOW THIS LINE ========================================= --> 
    <!-- ========================================================================= --> 
    <!-- === Library Names ======================================================= --> 
    <!-- ========================================================================= --> 

    <property name="libname.ojdbc6" value="ojdbc6.jar"/> <!-- JDBC DRIVER FOR ORACLE DB --> 

    <!-- =================================================================== --> 
    <!-- =========================== Classpath ============================= --> 
    <!-- =================================================================== --> 
    <fileset id="classpath.jars" dir="${project.base.dir}/lib"> 
     <include name="${libname.ojdbc6}" /> 
    </fileset> 

    <target name="clean"> 
     <delete dir="build"/> 
    </target> 

    <target name="compile" depends="clean"> 
     <mkdir dir="build/classes"/> 

     <echo>INTO compile TASK</echo> 

     <javac srcdir="src" destdir="build/classes" /> 

    </target> 

    <target name="jar" depends="compile"> 
     <mkdir dir="build/jar"/> 
     <jar destfile="build/jar/Main.jar" basedir="build/classes"> 
      <manifest> 
       <attribute name="Main-Class" value="Main"/> 
       <attribute name="Class-Path" value="./lib/ojdbc6.jar"/> 
      </manifest> 

     </jar> 
    </target> 

    <target name="run" depends="jar"> 
     <java jar="build/jar/Main.jar" fork="true"/> 
    </target> 

</project> 

的問題是,在這個階段,當我嘗試執行我的Main.jar在控制檯我獲得ClassNotFoundException,以這種方式:

C:\Projects\edi-sta\build\jar>java -jar Main.jar 
Hello World !!! 
0 
java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Unknown Source) 
     at Main.main(Unknown Source) 

C:\Projects\edi-sta\build\jar> 

這是因爲我不知道如何正確地包括ojdbc6.jar(包含Oracle驅動oracle.jdbc.OracleDriver文件)。

所以我覺得我必須把它做進罐子目標,所以我已經準備了一個字段集ID =「classpath.jars」在我的推杆的ojdbc6.jar

但現在我有什麼辦法來使用它來解決我的問題?我錯過了什麼?

TNX

+0

請不要問同樣的問題兩次。 http://stackoverflow.com/questions/28458761/how-to-include-a-jar-dependency-into-the-ant-target-that-generate-my-final-jar非常討厭 – 2015-02-11 18:28:20

+0

請不要問同樣的問題一遍又一遍地。推薦的方法是改進您當前的問題。 – 2015-02-12 22:14:00

回答

1

你問基本上什麼是我應如何包裝一個jar文件到另一個,你不應該這樣做(的原因有很多,其中之一是它是對幾乎所有的許可證)。

當你運行你編譯當您運行,你需要在你的classpath的JDBC JAR:

運行帶:

java -cp ./lib/ojdbc6.jar -jar Main.jar 

或類似

java -cp Main.jar:./lib/ojdbc6.jar Main 

run目標在您的構建。xml也需要引用類路徑。