我认为这是不可能的 . ProjectHelper#parse方法的API表明Project Helper可以支持任何类型的源,包括 InputStream
source - XML配置的源代码 . 为了向后兼容,帮助程序必须至少支持File . 助手可能支持URL,InputStream等或特殊类型 .
运行修改后的代码示例
String buildXml = "build.xml";
Project p = new Project();
p.setUserProperty("ant.file", buildXml);
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
InputStream inputStream = new FileInputStream(buildXml);
helper.parse(p, inputStream);
p.executeTarget(p.getDefaultTarget());
给出以下例外:
Exception in thread "main"
Source java.io.FileInputStream not supported by this plugin
at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:233)
at org.apache.tools.ant.helper.ProjectHelper2.parse(ProjectHelper2.java:177)
at ant.test.App.main(App.java:28)
不幸的是,在查看了最新的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 来使用它 .
org.apache.tools.ant.ProjectHelper类是期望实现的API . 因此,通过扩展该抽象类来编写自己的ProjectHelper .
但是,所有需要实现的方法似乎只适用于 java.io.File 或 java.net.URL .
所以我认为你最好的选择是从jar中提取 build.xml (如我的评论所示)并对其进行反对 .