0

我正在尝试构建我的控制台应用程序,并且正在使用 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:我应该把带有库的罐子放到我的罐子里吗?现在我将它们放到我的 jar 的“lib”目录中。所以 myjar.jar 包含我的类,META-INF 目录和 lib 目录的包。

4

3 回答 3

0

尝试像这样更改路径。

 <path id="libs.dir">
   <fileset dir="./lib" includes="**/*.jar"/>
 </path>
于 2012-10-12T12:24:36.583 回答
0

您需要 manifestclasspath 任务。

例子:

于 2012-10-12T23:46:42.527 回答
0

Max,假设正常使用,您不能将 jar 库插入 jar。要么您不必像 Romski 建议的那样在运行时手动指定它们。调用java -jar myjar.jar时,它应该找到所有 jar,前提是它们位于lib目录中。lib目录必须与jar所在的目录相同。java直接调用可执行文件还是通过antjava任务调用都没有关系。

请注意,当前目录仅与 jar 和lib.

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

tmp/myjar.jar
tmp/lib/commons-httpclient-3.1.jar

java -jar tmp/myjar.jar

编辑:现在我看到我刚刚写了与Oracle jar 教程中相同的内容。但我自己也用相对目录进行了测试。我还看到几十个在 jar 中搜索jar的 stackoverflow 问题,所以请先搜索 SO,然后再提问。

于 2012-10-13T13:55:45.320 回答