【问题标题】:Setting Class-Path in Ant build script在 Ant 构建脚本中设置 Class-Path
【发布时间】: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 &lt;jarname&gt;.jar 运行它
  • 那么,您想知道如何从具有一些外部依赖项的命令行运行您的应用程序吗?
  • 将依赖的 jars 放在 jar 的 lib 或 META-INF/lib 文件夹中将不起作用。它只适用于战争或耳朵档案,因为它是 JEE 规范的艺术,并且 JEE 容器能够从那里构造一个类路径。在正常情况下,您必须显式设置一个包含这些单独 jar 以及您的 jar 的类路径。

标签: java ant build classpath


【解决方案1】:

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

请注意,当前目录仅与 jar 和 lib 之间的关系无关。

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

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

运行java -jar tmp/myjar.jar

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

【讨论】:

    【解决方案2】:

    尝试像这样改变路径。

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

    【讨论】:

    • 那没有帮助。但我可以毫无问题地编译我的应用程序。当我运行应用程序时,类路径似乎有问题
    【解决方案3】:

    您需要 manifestclasspath 任务。

    例子:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 2020-08-21
      • 2010-11-12
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多