3

我想知道如何用 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>

<exec>3) 我可以在 Ant任务中使用上述命令行。(最佳解决方法)

4) 我找到了一些关于在 Maven 中使用<rulesFile>标签的参考。


上述选项对于我想做的事情并不理想。

我想从 Ant 任务中运行 JarJar,并传入一个规则文件。

4

1 回答 1

2

我无法从任何论坛或通过邮寄 JarJar 的开发人员获得有关此问题的任何信息,因此我决定使用我正在使用的解决方法来回答这个问题:

例如,以下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>
于 2012-07-23T07:57:41.503 回答