gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:20:21 25 4
gpt4 key购买 nike

我第一次尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com