我们使用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文件中的文件进行排序?提前谢谢。
答案 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>