当前位置: 首页 > 知识库问答 >
问题:

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

鲁华灿
2023-03-14

我正在尝试构建我的控制台应用程序,并且我正在使用Ant来构建它。我可以在Eclipse中运行我的应用程序,但是当我试图从我得到的jar中运行它时,ClassNotFoundException:被抛出。是在我的应用程序中使用的一个罐子中。这里是build.xml的一部分,我在这里创建manifest:

<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>
<path id="libs.dir">
    <fileset dir="lib" includes="**/*.jar"/>
</path>

UPD:我应该把有库的罐子放进我的罐子里吗?现在我把它们放到JAR的“lib”目录中。所以myjar.jar包含有我的类的包、META-INF目录和lib目录。

共有1个答案

杜俊爽
2023-03-14

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

请注意,当前目录并不重要,只与jar和lib之间的关系有关。

现在过于露骨了。按照以下步骤执行健全性测试:创建一个新的tmp目录并将文件复制到该目录:

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

运行java-jar tmp/myjar.jar

编辑:现在我看到我刚才写的是Oracle jar教程中的内容。但是我自己也用一个相对目录做了测试。我还看到很多stackoverflow问题在jar中搜索jar,所以请先搜索so然后问。

 类似资料:
  • 我已经配置了hudson和ant来编译这个项目,它工作得很好。 编译后,我希望脚本将输出目录上载到远程ftp服务器。 这是我正在使用的ant脚本: 它正在工作! 在每次编译之前,hudson会恢复所有更改的文件(基本上有2个,版本文件和编译文件)。 我希望脚本只将较新的文件上载到服务器。但是当我向节点添加一个属性:或时,我得到一个错误: Ant正在使用以下jar文件: 有什么建议吗?如果需要更多信

  • 下面是netbeans生成的构建文件: jfx-impl.xml 生成-IMPL

  • 问题内容: 我有一个Gradle构建脚本,该脚本必须实例化Task中的Java类并在创建的对象上调用方法。目前,我有以下内容: 问题是找不到该类。我阅读了有关如何在Gradle中使用Groovy类的文章,但是我需要Java类来自外部JAR文件。如何将jar添加到构建源?似乎该块没有执行我期望的操作。谁能给我一个正确方向的提示? 问题答案: 该依赖关系作为项目依赖关系而不是脚本依赖关系本身添加。您需

  • 我有一个Gradle构建脚本,它必须在一个任务中实例化一个Java类,并在创建的对象上调用一个方法。目前,我有以下内容: 问题是找不到类。我阅读了这篇关于如何在Gradle中使用Groovy类的文章,但我需要我的Java类来自外部JAR文件。如何将jar添加到构建源中?似乎块没有完成我所期望的任务。谁能给我一个正确方向的提示吗?

  • Ant 任务是 Gradle 的一等公民. Gradle 通过 Groovy 出色的集成了 Ant 任务. Groovy 自带了一个 AntBuilder. 相比于从一个 build.xml 文件中使用 Ant 任务, 在 Gradle 里使用 Ant 任务更为方便和强大. 从下面的例子中, 你可以学习如何执行 Ant 任务以及如何访问 ant 属性: 例子 6.13. 使用 AntBuilder

  • 我在谷歌上研究了我的许多问题,但没有找到任何能提供直接答案的东西。我正在设置代码电子邮件一个表一次(或多次)。我无法设置收件人的电子邮件地址。我需要脚本为数据范围()中的每个地址发出一封电子邮件。 我很遗憾,由于隐私原因,我不能分享整个脚本。(从积极的方面来说,除了这个以外,其他的东西都起作用了。) 要获得“gmailapp.sendeMail”语句可用的一个(或多个)电子邮件地址,需要做什么?无