我想知道您是否可以在位于 JAR 内的构建文件上运行 Ant。 我对此感兴趣的原因是,我想在我的构建文件中包含一个"部署"目标,可以在 jar 移动到其目的地后调用该目标。 该"部署"目标将负责提取运行程序所需的资源和其他库。
因此,例如,在构建时,我会将属性,图像和外部jar打包在我的jar内。 然后,部署过程将包括将 jar 移动到它要运行的位置,并调用 ant <someOption> myjar.jar/build.xml deploy
或类似的东西。
这有意义吗?
我认为没有办法ant
可以在 jar 内获取构建文件。
对于您描述的方法,您需要解压缩build.xml
并将其传递给 ant。由于 ant 不将stdin
作为构建文件的参数,因此您需要存储构建文件然后删除它:
$ unzip myjar.jar build.xml
$ ant deploy
$ rm build.xml
但是,应用程序运行环境是否有必要仅安装ant来提取这些资源?不能在您的应用程序中完成吗?或者你不能分发一个带有你的jar,库jar和图像的zip文件?
或者也许创建一个安装程序应该更合适:I\Pack,或者,如果只有Windows,NSIS。
可以使用 ProjectHelper 扩展 Ant 的构建文件解析。 默认仅加载文件(源)。
你可以扩展它来处理XML源,它可以来自jar(可能使用getResourceAsStream(..))。
[ 旁注:您可以通过编程方式运行 ant。无需提取然后运行命令行 - 请参阅通过 Java 以编程方式运行 ANT ]