我想这是一个两部分的问题。我正在尝试编写我自己的 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/目录下的依赖项?提前致谢!