ANT:在生成的jar中对文件进行排序

时间:2011-06-14 09:00:06

标签: java sorting ant

我们使用ANT创建jar文件。为了创建100%可靠的构建(无论它们生成在哪台机器上),我们希望对生成的jar文件中的文件进行排序(因此使用的混淆器在每台机器上产生相同的结果)。然后使用以下代码片段创建jar文件(然后发送到混淆器):

<jar jarfile="my.jar" compress="false" duplicate="fail">
    <fileset dir="classes" includes="com/**"/>
    <!-- another fix -->
    <fileset dir="classes" includes="org/**"/>
</jar>

我们如何确保对jar文件中的文件进行排序?提前谢谢。

2 个答案:

答案 0 :(得分:2)

这里没有办法依靠你自己的排序算法。 Java规范没有提到任何排序逻辑。 (不适用于JAR中的文件或EAR中的JAR文件)。 在您的情况下,如果您通过ANT或Maven构建,在某些时候,底层操作系统将决定从文件系统读取文件的顺序,并打包在JAR文件中。

如果您真的想让多台机器进行构建,那么最好的办法是确保您用于执行构建的机器基于相同的硬件/操作系统,并使用相同版本的JDK,Ant ,....

另一个选项(可能更可行)是将构建委派给专用构建机器(在那里也进行模糊处理),在某种存储库中发布工件,并让开发人员使用来自该中央存储库的那些JAR文件

答案 1 :(得分:0)

好的,我找到了解决方案:

<local name="sortedFiles"/>
<pathconvert property="sortedFiles" pathsep="${line.separator}">
     <sort>
         <fileset dir="classes" includes="com/**"/>
     </sort>
     <sort>
         <fileset dir="classes" includes="org/**"/>
     </sort>
</pathconvert>
<jar jarfile="my.jar" compress="false" duplicate="fail">
    <filelist dir="classes" files="${sortedFiles}"/>
</jar>