我正在尝试构建我的控制台应用程序,并且我正在使用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 :我应该把带有libs的罐装到我的罐子里吗?现在我把它们放到我的jar的“lib”目录中。所以myjar.jar包含我的类,META-INF目录和lib目录的包。
答案 0 :(得分:0)
尝试改变这样的路径。
<path id="libs.dir">
<fileset dir="./lib" includes="**/*.jar"/>
</path>
答案 1 :(得分:0)
答案 2 :(得分:0)
Max,假设正常使用,你不能将jar库插入jar。您可以不必在运行时手动指定它们,就像Romski建议的那样。调用java -jar myjar.jar
时,它应该找到它们位于lib
目录中的所有罐子。 lib
目录必须位于jar所在的目录中。如果直接或通过ant java
任务调用java
可执行文件,则无关紧要。
请注意,当前目录只与jar和lib
之间的关系无关。
现在过于明确。按如下方式执行完整性测试:创建一个新的tmp
目录并将文件复制到其中:
tmp/myjar.jar
tmp/lib/commons-httpclient-3.1.jar
运行java -jar tmp/myjar.jar
编辑:现在我看到我刚刚写了Oracle jar tutorial中的内容。但我也用相对目录自己做了测试。我还看到几十个stackoverflow问题在jar 中搜索 jar,所以请先搜索SO,然后再询问。