Java 在Ant构建脚本中设置类路径

Java 在Ant构建脚本中设置类路径,java,ant,build,classpath,Java,Ant,Build,Classpath,我正在尝试构建我的控制台应用程序,我正在使用Ant来构建它。我可以在Eclipse中运行我的应用程序,但是当我试图从我得到的jar中运行它时,就会抛出ClassNotFoundException:。在我的应用程序中使用的一个罐子中。下面是build.xml的一部分,我在其中创建清单: <manifest> <attribute name="Main-Class" value="com.package.Reporter" /> <attribu

我正在尝试构建我的控制台应用程序,我正在使用Ant来构建它。我可以在Eclipse中运行我的应用程序,但是当我试图从我得到的jar中运行它时,就会抛出ClassNotFoundException:。在我的应用程序中使用的一个罐子中。下面是build.xml的一部分,我在其中创建清单:

<manifest>
      <attribute name="Main-Class" value="com.package.Reporter" />
      <attribute name="Class-Path" value="lib/commons-httpclient-3.1.jar
        lib/commons-logging-api.jar
        ...lot of jars...
        lib/stax-api-1.0.1.jar" />
</manifest>

所需的类位于commons-httpclient-3.1.jar中 下面是我如何设置用于编译的类路径,这很好:

<path id="libs.dir">
    <fileset dir="lib" includes="**/*.jar"/>
</path>


UPD:我应该把带LIB的罐子放到我的罐子里吗?现在我把它们放在jar的“lib”目录中。因此,myjar.jar包含包含我的类、META-INF目录和lib目录的包。

尝试像这样更改路径

 <path id="libs.dir">
   <fileset dir="./lib" includes="**/*.jar"/>
 </path>

您需要manifestclasspath任务

例如:


Max,假设正常使用,您不能将jar lib插入jar。或者您不必像Romski建议的那样在运行时手动指定它们。调用
java-jar myjar.jar
时,它应该找到所有jar,只要它们位于
lib
目录中
lib
目录必须位于jar所在的同一目录中。无论您是直接调用
java
executable还是通过ant
java
task调用
java
executable

请注意,当前目录不仅关系到jar和
lib
之间的关系

现在过于明确了。按如下方式执行健全性测试:创建一个新的
tmp
目录并将文件复制到其中:

tmp/myjar.jar
tmp/lib/commons-httpclient-3.1.jar
运行
java-jartmp/myjar.jar


编辑:现在我明白了,我只是写了同样的东西。但我自己也用一个相对目录进行了测试。我还看到许多在jar中搜索jar的stackoverflow问题,所以请先搜索so,然后提问。

编译时与运行时不同。您正在尝试如何运行应用程序?是的。我理解这个。我正在尝试使用
java-jar.jar
运行它,那么,您想知道如何从具有一些外部依赖项的命令行运行应用程序吗?将依赖jar放在jar的lib或META-INF/lib文件夹中是行不通的。它只适用于war或ear归档,因为这是JEE规范的艺术,JEE容器能够从那个里构建类路径。在正常情况下,您必须显式地设置一个包含这些独立jar的类路径。这没有帮助。但是我可以毫无问题地编译我的应用程序。运行应用程序时,类路径似乎有问题