2011-06-14 72 views
2

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

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

我们如何能确保在JAR文件中的文件进行排序?提前致谢。

回答

0

OK,我已经找到了解决办法:

<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> 
2

这里没有办法依靠自己的排序算法。 Java规范没有提及任何排序逻辑。 (不适用于JAR中的文件或EAR中的JAR文件)。 就你而言,如果你是通过ANT或Maven构建的,那么底层操作系统将决定从文件系统中读取文件的顺序和打包在JAR文件中的顺序。

如果你真的希望有多台机器正在构建,最好的选择是确保你用来执行构建的机器基于相同的硬件/操作系统,并使用相同版本的JDK,蚂蚁,....

另一个选择(也许更可行)是委托你的建设一个专用的生成机器(你也做混淆),发布工件在某种类型的存储库,并让开发人员使用来自该中央存储库的那些JAR文件。