2013-05-28 21 views
5

Java kütüphanesi için bir Ant derleme dosyam var. Bu şuna benzer:Ant'in dosya kümesi komutunun hedef dizinini nasıl değiştiririm?

<project ... ><target ... > 
<jar destfile="C:\path\to\export.jar"> 
    <manifest> ... </manifest> 
    <fileset dir="C:\path\to\bin" /> 
    <fileset dir="C:\path\to\src" /> 
    <fileset dir="C:\path\to\doc" /> 
    <zipfileset src="C:\path\to\included\library.jar" /> 
</jar> 
</target></project> 

Tek sorun benim javadoc çıkan kavanoz dosyasının kök dizinine doğrudan ihraç ediliyor olmasıdır. Temel olarak, <jar> komutunun içinde kullanılabilecek <copydir> komutunun bazı eşdeğerlerini istiyorum.

export.jar 
    META-INF 
    Manifest.MF 
    com 
    example 
     whatever 
     Blah.class 
     Blah.java 
    org 
    external 
     somelibrary 
     Magic.class  // contents of the included library jar file 
    doc 
    // javadoc files here 

akım yapıdır:

Benim istenen yapı budur

export.jar 
    META-INF 
    Manifest.MF 
    com 
    example 
     whatever 
     Blah.class 
     Blah.java 
     // some javadoc files here 
    org 
    external 
     somelibrary 
     Magic.class  // contents of the included library jar file 
    // more javadoc files here 
Benim şu anki "çözüm" kavanoz kez, o zaman, dokümantasyon <fileset> komutu ihmal etmektir

dışa aktarıldı, Windows Gezgini'ne gidin ve sağa tıklayın7-ZipOpen Archive; Daha sonra doc dizini oraya bırakabilirim. Bununla birlikte, bu tamamen tamamen otomatik bir yapı sistemi olarak Ant'in amacını tamamen bozar.

Önemli ise, bu dosya aslında Eclipse tarafından Runnable JAR dışa aktarıcıyla üretildi. Bununla birlikte, açıkçası kaynak dosyaları eklemek için onu değiştirmem gerekiyor, çünkü bir kütüphane ve aslında çalıştırılabilir bir kavanoz değil. Eclipse'in gerekli kütüphanelerde paketlenmesini sağlamak için onu runable bir kavanoz olarak ihraç ettim; görünüşte yapı yolunda kütüphaneler standart DosyaİhracatJAR dosyası yoluyla ihracat için kullanılamaz.

cevap

10

Bir kavanoz aslında bir zip dosyası gibidir. Bu nedenle, zipfileset'u kullanabilirsiniz. Onun özniteliği prefix aradığınız şeydir.

zipfileset komutu, src aracılığıyla bir zip dosyasını veya dir aracılığıyla bir dosya sistemi dizinini kabul edebilir.

Ayrıca
<zipfileset dir="C:\path\to\doc" prefix="doc" /> 

nota değer o zipfileset dosya seti tüm özelliklerini destekler ise: Bu sonuncusunu kullanarak aşağıdaki komutu ekleyebilirsiniz. Belirli bir yerde sadece tek bir dosya eklemek istediğiniz Böylece eğer kullanabilirsiniz:

<zipfileset file="C:\path\to\doc\file.txt" prefix="doc" /> 

Daha okuma: bir kavanoz zip sıkıştırma kullanır ben farkındayım http://ant.apache.org/manual/Types/zipfileset.html

+0

. Ancak, 'doc' klasörüm bir dosya değil, bir zip dosyası değildir. Eclipse'e göre, 'fileset 'komutunda' prefix' özniteliği yoktur. – wchargin

+1

'zipfileset' iki şekilde kullanılabilir. Bir zip dosyası içinde bir dosya grubu olarak. Bir dosya kümesine bir zipte (ya da bir kavanozda) dahil olmak üzere biri bu aynıdır. Sonuncusu kullanım durumunuz içindir. Cevabımda işaret ettiğim dokümanın ilk satırlarını okuyun. –

+0

Teşekkürler! Eğer bir sakıncası yoksa cevabınızı bir kod örneği içerecek şekilde düzenleyeceğim. – wchargin

İlgili konular