我想这是一个两部分的问题。我正在尝试编写我自己的 Ant 任务 ( MyFirstTask
),它可以在其他项目的构建文件中使用build.xml
。为此,我需要将我的 Ant 任务编译并打包到它自己的 JAR 中。因为我写的这个 Ant 任务相当复杂,它有大约 20 个依赖项(其他 JAR 文件),例如使用 XStream 进行 OX 映射,使用 Guice 进行 DI 等。
我目前正在MyFirstTask 项目内package
的文件中编写任务build.xml
(将打包的构建文件myfirsttask.jar
,这是可重用的 Ant 任务)。
我突然意识到我并不完全理解 Java JAR 的意图。是不是 JAR 不应该包含依赖项,而是将其留给运行时配置(应用程序容器、运行时环境等)来为其提供所需的依赖项?我会假设如果是这种情况,可执行 JAR 是规则的例外,是吗?
或者, Java JAR 是否也打算包含它们的依赖项?
无论哪种方式,我都不想强迫我的用户将 25 个以上的 JAR 复制粘贴到他们的 Ant 库中;这太残忍了。我喜欢 WAR 文件的设置方式,其中依赖项的类路径在classes/
目录下定义。
我想,最终,我希望我的 JAR 结构看起来像:
myfirsttask.jar/
com/ --> the root package of my compiled binaries
config/ --> config files, XML, XSD, etc.
classes/ --> all dependencies, guice-3.0.jar, xstream-1.4.3.jar, etc.
META-INF/
MANIFEST.MF
我假设为了完成这个(并让运行时类路径也查看classes/
目录),我需要以某种方式修改 MANIFEST.MF(我知道有一个名为 的清单属性ClassPath
,我相信?)。我只是很难将所有东西放在一起,并且有一个关于 JAR 最初意图的迫在眉睫/挥之不去的问题。
有人可以确认 Oracle 是否打算让 JAR 包含它们的依赖项吗?而且,无论哪种方式,我必须在清单(或其他任何地方)中做些什么来确保在运行时类路径可以找到存储在classes/
目录下的依赖项?提前致谢!