我需要使用存储在jar文件中的build.xml文件来运行ANT构建 . 此jar文件在类路径中可用 . 是否可以这样做,而不会爆炸jar文件并将build.xml保存到本地目录?如果是这样我怎么能这样做 .
Update:
jar文件是一个ant构建项目,其中classpath中的build.xml通过使用ANT库的java程序运行 . 前端是一个Web应用程序,它将此构建项目jar作为依赖项加载 . 用户将单击“构建应用程序”按钮以运行ANT构建 . 因此,当用户单击Build App时,我需要在jar中运行build.xml文件 .
用于读取build.xml文件的代码
URL preBuildFileUrl = getClass().getClassLoader().getResource("build.xml");
Project p = new Project();
p.setUserProperty("ant.file", preBuildFileUrl.toURI().getPath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, new File(preBuildFileUrl.toURI().getPath()));
p.executeTarget(p.getDefaultTarget());
2 回答
我认为这是不可能的 . ProjectHelper#parse方法的API表明Project Helper可以支持任何类型的源,包括
InputStream
运行修改后的代码示例
给出以下例外:
不幸的是,在查看了最新的apache ant版本的源代码(发布时间为1.9.4)后,内置
ProjectHelper
实现仅支持java.io.File
java.net.URL
org.apache.tools.ant.types.Resource
即使
InputStream
后来创建了几行:/The apache ant manual建议可以实现自己的
ProjectHelper
并配置ant以使用系统属性org.apache.tools.ant.ProjectHelper
来使用它 .但是,所有需要实现的方法似乎只适用于
java.io.File
或java.net.URL
.所以我认为你最好的选择是从jar中提取
build.xml
(如我的评论所示)并对其进行反对 .可以通过对Java使用Java URL语法 . 如果您使用getResource()获取了build.xml,则URL外部表单如下所示:
所以使用URL调用应该没问题: