2009-09-30 13 views
20

: Ben tek bir zip dosyası içine olmayan java proje eserler (NET) paketlemek çalışıyorum. - Ben <packaging>pom</packaging> olarak değiştirdim aksi oluşturulur yararsız kavanozun kurtulmak için [INFO] Cannot find lifecycle mapping for packaging: 'zip'. Component descriptor cannot be found in the component repository: org.apache.mav en.lifecycle.mapping.LifecycleMappingzip. tamam kadar büyük: Ben <packaging>zip</packaging> zip benim POM ambalaj değiştirirseniz, bu hata mesajı alıyorumMaven düz zip düzeneğini oluştururken orada Maven gurulara için

: Ben 2 sorunlar yaşıyorum hedef dir

Benim asıl sorun ben ZIP içine ambalaj ediyorum dosyalar birkaç dizinleri içinde yuvalanmış olmasıdır ama ZIP üst dizine bu koymak gerekir. İşte benim derleme dosyası var:

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${basedir}/${project.artifactId}</directory> 
     <includes> 
     <include>**/Bin/Release/*.dll</include> 
     <include>**/Bin/Release/*.pdb</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

Bunu çalıştırmak

- Ben ZIP dosyası elde edersiniz ancak dosyalar C ile başlayan iç içe olacak: \ tam yolunu izler. Size fikir vermesi için - Proje aşağıdaki yapıya ProjectFoo\ProjectFoo\subproject1\Bin\Release\foo.dll içine ikilileri var döker ve ben ZIP\foo.dll İşte

montaj eklentisi bulunuyor yapılandırmayı gerekir:

<plugin> 
<artifactId>maven-assembly-plugin</artifactId> 
<configuration> 
    <descriptors> 
     <descriptor>assembly.xml</descriptor> 
    </descriptors> 
</configuration> 
<executions> 
    <execution> 
     <id>zip</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
    </execution> 
</executions> 

Belki sadece antrun kullanmak ve karınca zip yürütmek gerekiyor görev? Gördüğünüz gibi

cevap

27

, bir zip paketleme tipi yoktur, bu nedenle size seçtiniz olarak pom ambalajı kullanmak mantıklı.

Montaj eklentisinin işlemesinde biraz delikle karşılaştınız. Bunu, dahil etmek istediğiniz her dizin için bir tane olan <outputDirectory>/<outputDirectory> ile derlemede birden çok dosya kümesini belirterek çözebilirsiniz, bu kesinlikle bir PITA'dır ve muhtemelen kabul edilebilir bir çözüm değildir.

alternatif bir yaklaşım, daha sonra bir evreleme dizine tüm DLL kopyalamak mecliste dizini içine alması için Ant kopya görevi kullanmaktır.

aşağıdaki yapılandırma yapmalıdır sen sonra ne:

antrun-eklenti yapılandırması:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <phase>process-resources</phase> 
     <configuration> 
      <tasks> 
      <copy todir="${project.build.directory}/dll-staging"> 
       <fileset dir="${basedir}/${project.artifactId}"> 
       <include name="**/Bin/Release/*.dll"/> 
       <include name="**/Bin/Release/*.pdb"/> 
       </fileset> 
       <flattenmapper/> 
      </copy> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

montaj: Tam olarak ne gerekli

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}/dll-staging</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>*.dll</include> 
     <include>*.pdb</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 
+0

! Teşekkür ederim Rich! – Bostone

+0

Hoş Geldiniz –

+0

Yine de bir sorun var. Zip hala "artifactId-Version" türünde bir üst dizini korur. Tüm dosyalarımı ziplediğimde, '/' içinde değil '/ Foo-1.0-SNAPSHOT /' içinde de bitmez. Yine de dosyalar hedef/dll-kademelendirme – Bostone