【发布时间】:2012-10-12 12:17:31
【问题描述】:
我正在尝试构建我的控制台应用程序,并且我正在使用 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 放到我的 jar 中吗?现在我将它们放到我的 jar 的“lib”目录中。所以 myjar.jar 包含我的类,META-INF 目录和 lib 目录的包。
【问题讨论】:
-
编译时间与运行时间不同。您尝试如何运行您的应用程序?
-
是的。我明白这一点。我正在尝试使用
java -jar <jarname>.jar运行它 -
那么,您想知道如何从具有一些外部依赖项的命令行运行您的应用程序吗?
-
将依赖的 jars 放在 jar 的 lib 或 META-INF/lib 文件夹中将不起作用。它只适用于战争或耳朵档案,因为它是 JEE 规范的艺术,并且 JEE 容器能够从那里构造一个类路径。在正常情况下,您必须显式设置一个包含这些单独 jar 以及您的 jar 的类路径。