2015-02-11 137 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也需要引用类路径。

相关问题