2010-03-26 13 views
28

Önceden derlenmiş bir JAR dosyasından dosyaları kaldıran bir karınca görevi nasıl yazılır?ant görevleri bir kavanozdan kaldırmak için görev

aaa/bbb/ccc/Class1 
aaa/bbb/ccc/Class2 
aaa/bbb/def/Class3 
aaa/bbb/def/Class4 

... ve aaa.bbb.def paket olmadan bu JAR dosyasının bir sürümünü istiyorum, ve karınca kullanarak dışarı şerit gibi bunu gerekir:

benim JAR dosyaları diyelim vardır içeren bir JAR ile son:

aaa/bbb/ccc/Class1 
aaa/bbb/ccc/Class2 

Teşekkürler!

cevap

55

zipfileset görevini kullanmayı denediniz mi?

<property name="library.dir" value="dist"/> 
<property name="library.file" value="YourJavaArchive.jar"/> 
<property name="library.path" value="${library.dir}/${library.file}" /> 
<property name="library.path.new" value="${library.dir}/new-${library.file}"/> 

<target name="purge-superfluous"> 
    <echo>Removing superfluous files from Java archive.</echo> 

    <jar destfile="${library.path.new}"> 
     <zipfileset src="${library.path}" excludes="**/ComicSans.ttf"/> 
    </jar> 

    <delete file="${library.path}" /> 
    <move file="${library.path.new}" tofile="${library.path}" /> 
</target> 
+0

@mipadi Teşekkür: Burada

bir örnektir! Orta aşama olmayan bir yöntem olduğunu umuyordum - bu doğrudan Jar'dan dosya/klasörleri kaldırarak. Bunu tahmin edemediğim en yakın noktaya geleceğim! – bguiz

+0

Sadece bir FYI, muhtemelen bunu en çok biliyor ama bunu düşünmedim :-). "Kavanoz" görevi, benim durumumda sorunlara neden olan JAR'ın MANIFEST.MF'sini değiştirecek. Ben sadece "manifest" özelliğini jar görevine ekledim ve kullanmasını istediğim manifestoya işaret ettim. Büyük cevap olsa da, kesinlikle bana yardımcı oldu, teşekkürler! – Craig

+1

Ayrıca MANIFEST.MF'yi değiştirmekten kaçınmak için 'jar 'yerine' zip' kullanabilir – npostavs

5

Sen unjar ve rejar gerekiyor.

<unzip src="myjar.jar" dest="/classes/"> 
<jar destfile="newjar.jar" 
    basedir="/classes/" 
    includes="**/*" 
    excludes="**/def/*" 
/>  
1

Bir kavanoz dosya sahip sıkıştırma programı gibi, örneğin: Örneğin

<jar destfile="stripped.jar"> 
    <zipfileset src="full.jar" excludes="files/to/exclude/**/*.file"/> 
</jar> 

Linux üzerinde "zip", kullanılabilir, görev

 
<exec executable="zip">    
<arg value="-d"/>    
<arg value="myJarCopyToStrip.jar"/>    
<arg value="aaa/bbb/def/*>    
<arg value="aaa/bbb/def> 
</exec> 

alt ağacı silme yapılabilir kullanılan arşiv yeteneklerine bağlıdır.
Ant "exec" görevinin "os" özelliği, farklı işletim sistemlerinde farklı arşivleyicilerin kullanılmasına izin verir.

1

Burada karınca unzip bazı kısa comings bir geçici çözüm olarak kullanmak için buraya geldim.

Ondan başka biri aynı teknede. Cevabınız için

task antUnzip() << { 

      ant.jar(destfile : "stripped.jar") { 
       zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") { 
       } 
      } 
}