如何在生成我的应用程序的最终.jar文件的ANT目标中包含.jar依赖项?

我是Ant的新手,我在创建build.xml文件时遇到以下问题,该文件处理以下单个类应用程序的.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. } } } 

正如您所看到的, main()方法的行为非常简单,此时只获取与Oracle数据库连接 (由Connection conn对象表示)。

要获得连接,请使用此类oracle.jdbc.OracleDriver来表示Oracle DB驱动程序。 这个类包含在一个名为ojdbc6.jar的jar文件中,该文件放在我项目的lib文件夹中。

所以我有以下项目结构:

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

所以我创建了这个build.xml文件:

   EDI-STA                        INTO compile TASK                

问题是,在这个阶段,当我尝试在控制台中执行我的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的文件)。

所以我认为我必须把它放到jar目标中,所以我准备了一个id =“classpath.jars”字段集 ,我在其中ojdbc6.jar

但是现在我有什么办法来解决我的问题? 我错过了什么?

TNX

基本上你要问的是我如何将一个jar文件打包到另一个jar文件中,你不应该这样做(出于很多原因,一个是几乎所有的许可证)。

运行时编译AND运行时,需要在类路径上使用jdbc jar:

运行:

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

或类似的东西

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

build.xml中的run目标也需要引用类路径。