2011-06-14 26 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文件。

相關問題