我想知道如何用Ant运行JarJar,用外部规则文件传递规则。
1) 我知道我可以一个接一个地通过以下规则:
<jarjar destfile="B.jar" >
<zipfileset src="A.jar" />
<rule pattern="com.a.**" result="test.b.@1" />
</jarjar>
2) 我知道如果我从命令行运行文件,我可以在文件中传递规则:
java -jar jarjar.jar process <rulesFile> <inJar> <outJar>
3) 我可以在Ant <exec>
任务中使用上面的命令行。(最佳解决方法)
4) 我在Maven中找到了一些使用<rulesFile>
标记的参考。
以上选项对于我想做的事情来说并不理想。
我想从Ant任务中运行JarJar,传入一个规则文件。
我无法从任何论坛或通过邮寄JarJar的开发人员获得有关此问题的任何信息,因此我决定用我正在使用的解决方法来回答此问题:
- 使用DOCTYPE&ENTITY xml实体(根据蚂蚁网站上的建议)
例如,下面的build.xml
文件包括内联的另一个test.txt
文件的内容。我使用标签include_this
导入文本文件(这是我的名字,你可以在这里使用任何名字):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project [
<!ENTITY include_this SYSTEM "test.txt">
]>
<project name="Test" default="build" >
<target name="build" >
&include_this;
</target>
</project>
在这个简单的例子中,test.txt
文件的内容是:
<echo>This is a test.</echo>
因此,我一直在使用此解决方法来替换jarjar
调用中的规则。将规则放入test.txt
文件:
<rule pattern="com.**" result="${project.output}.com.@1" />
<rule pattern="org.**" result="${project.output}.org.@1" />
然后我的jarjar
呼叫变为:
<!-- jarjar uses the same syntax as the jar task -->
<jarjar destfile="${jarjar.output.dir}/${project.output}.jar" >
<!-- source files -->
<zipfileset src="${jar.output.dir}/${project.output}.jar" />
<!-- refactoring rules -->
&include_this;
</jarjar>