2013-08-22 2 views
3

우리 빌드에서 많은 jar 파일에 서명하고 있습니다. 현재 총 빌드 타임의 60-80 %가 걸리고 15 분에서 45 분 이상으로 변경됩니다. 따라서 우리는 서명 과정을 병렬 처리하여 속도를 높이는 데 매우 관심이 있습니다.Ants signJar 작업을 병렬화하는 방법

모든 단지 하나 개의 폴더에, 그리고 지금 우리의 스크립트는 다음과 같이 보입니다 : 모든 단지가 하나 개의 폴더에 있기 때문에,

<property name="jars.dir" location="......" /> 
<signJar ...paswords etc... /> 
    <fileset dir="${jars.dir}" includes="**/*.jar" /> 
</signJar> 

내가 하찮게 parallel 태그를 사용할 수 없습니다를, 그래서 우리는 몇 가지가 필요합니다 그것을 평행하게 만드는 다른 방법. 빌드는 여러 컴퓨터와 서버에서 실행되므로 솔루션은 다양한 코어를 처리 할 수있을만큼 유연합니다.

여러분 중 일부는 도움을 받기를 바랍니다. 고마워요 :)

답변

3

당신은 jars의 파일 세트를 반복하고 signJar 작업을 호출하여 각 jar에 서명 할 수 있습니다. for 태스크에는 동시성을 제어하기위한 병렬 옵션 및 특성도 있습니다.

+0

매력처럼 작동합니다. 감사합니다. – Tobber

+0

빌드 프로세스에서 구현 한 것과 정확히 일치합니다. 이렇게하면 막대한 시간을 절약 할 수 있습니다. I/O로 인해 논리적 코어보다 많은 스레드를 사용하는 것이 좋을 수 있음을 유의하십시오. 이는 약간의 실험이 필요합니다. 예 : 인텔 코어 i7에서 8 개의 논리적 코어를 가진 코어 i7은 8 개의 스레드를 사용하는 것보다 빠르게 실행됩니다. –

1

FWIW, 여기 웹 스타트 용 JAR에 서명하고 팩하기 위해 사용하는 매크로가 있습니다. 이렇게하면 필요한 매니페스트 특성이 추가되고 재 패키징하여 서명 할 JAR이 표준화됩니다.

이 매크로는 병렬 <for> 루프 내에서 호출 할 때 잘 작동합니다.

키 정보로 <signjar> 작업을 조정해야합니다.

<!-- Macro for JAR signing and pack200 --> 
<macrodef name="sign-and-pack"> 
    <attribute name="jar"/> 
    <sequential> 
     <echo message="Signing and packing @{jar}..."/> 

     <!-- Kill any existing signatures and delete existing manifest --> 
     <exec executable="zip" logError="true" failonerror="false"> 
      <arg value="-d"/> 
      <arg value="--quiet"/> 
      <arg value="@{jar}"/> 
      <arg value="META-INF/MANIFEST.MF"/> 
      <arg value="META-INF/*.SF"/> 
      <arg value="META-INF/*.DSA"/> 
      <arg value="META-INF/*.RSA"/> 
     </exec> 

     <!-- Rebuild manifest with the required attributes --> 
     <jar update="true" file="@{jar}"> 
      <manifest> 
       <attribute name="Application-Name" value="${webstart.app.name}"/> 
       <attribute name="Permissions" value="all-permissions"/> 
       <attribute name="Codebase" value="*"/> 
       <attribute name="Trusted-Only" value="true"/> 
      </manifest> 
     </jar> 

     <!-- Pack and unpack JAR to normalize it --> 
     <exec executable="pack200" logError="true" failonerror="true"> 
      <arg value="--quiet"/> 
      <arg value="--repack"/> 
      <arg value="@{jar}"/> 
     </exec> 

     <!-- Sign JAR --> 
     <signjar keystore="mykeystore.p12" storetype="pkcs12" storepass="secret123" jar="@{jar}" 
      alias="my key alias"/> 

     <!-- Compress JAR --> 
     <exec executable="pack200" logError="true" failonerror="true"> 
      <arg value="--quiet"/> 
      <arg value="--modification-time=latest"/> 
      <arg value="@{jar}.pack.gz"/> 
      <arg value="@{jar}"/> 
     </exec> 
    </sequential> 
</macrodef> 
관련 문제