java - 无法使用 Ant 获得按照我想要的方式构造的 jar 文件

标签 java ant jar

我第一次尝试使用 Ant 创建 JAR,但遇到了一些困难。这是我的项目目录结构:

MyProj/
    src/
        com.me.org
            Fizz
            Buzz
    dist/
        classes/

在我的 Ant 构建脚本中,我将所有源文件复制到 dist/classes/ 中文件夹。然后我包括 dist/classes作为我的 JAR 任务中的文件集,如下所示:

<jar destfile="dist/myProj.jar">
    <manifest>
        <attribute name="Sealed" value="true" />
    </manifest>

    <fileset dir="dist/classes"/>
</jar>

JAR 任务执行并生成 JAR。但是,当我将该 JAR 放在另一个项目 (Eclipse) 的构建路径上并尝试使用 Fizz 时,或Buzz在另一个项目中,Eclipse 将它们导入为:

import classes.com.me.org.Fizz;

等等。这是因为 Eclipse 必须认为我的 classes/目录是一个包!

我假设我可以在 list 中做一些事情来说“嘿!根包是 classes/com/ ,而不是 classes/ !”,这样它们将被导入为:

import com.me.org.Fizz;

我阅读了 Ant <manifest>任务,但找不到我要找的东西。有人知道我可以在这里做什么吗?

而且,如果您好奇为什么我想将它们打包在 classes/ 下目录,那么我会说它是因为我喜欢在包含整个类路径的 JAR 中拥有一个目录的想法。而且,特别是如果存在非 Java 类路径资源(图像、脚本、文件等),您需要一个位置来将包根目录 ( com/ ) 和这些其他资源放在同一父目录中。

本来,我打算将这个目录命名为 classpath/ ,但后来我决定使用与 WAR 文件规范相同的约定,这需要有一个 classes/ WAR 内的目录。

这就是原因。 ;-) 提前致谢!

最佳答案

您是否尝试过将 Class-Path 属性添加到 list 中?我认为添加以下内容会起作用:

Class-Path : classes/

如果这不起作用,那么您可能必须在根级别打包一个包含类的 jar,然后将其添加到 myProj.jar 中。因此,您首先要创建一个仅包含您的类 myClasses.jar 的 jar,然后将该 jar 打包到 myProj.jar 中。 list 将包含:

Class-Path : classes/myClasses.jar

你的 jar 看起来像这样:

myProj.jar
  - META-INF/MANIFEST.MF
  - classes/myClasses.jar

我从来没有真正尝试过这个,如果它没有按预期工作,我很抱歉。 Here is有关 Class-Path 属性的更多信息。

关于java - 无法使用 Ant 获得按照我想要的方式构造的 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741413/

相关文章:

java - JavaFX 中的 registerChangeListener 方法有什么作用?

java - 编程练习: Java Logger (log4j)

java - 使用 Ant 启动的 JUnit-Test 给出了 "ClassNotFoundException"

java - 如何使用 javafxports android 和 ant 构建 apk?

java - 使用 SWT 解决 NoClassDefFoundError 异常

java - 随机替换字符串中随机数的字符

java - HSQLDB - 9.0 之前的客户端尝试连接

java - Scpsolver jar 的代码示例

android - 从 Android Studio Gradle 构建为 AWS Device Farm 生成 UIAutomator 测试 JAR

java - 在另一个类的 UI 线程上运行