2009-09-30 14 views
20

Do guru Mavena: Próbuję spakować artefakty projektu innego niż java (.NET) w pojedynczy plik zip. Mam 2 problemy:Maven tworzący płaski zespół zamka błyskawicznego

Jeśli zmienię opakowanie w moim POM zip <packaging>zip</packaging>, otrzymuję komunikat o błędzie: [INFO] Cannot find lifecycle mapping for packaging: 'zip'. Component descriptor cannot be found in the component repository: org.apache.mav en.lifecycle.mapping.LifecycleMappingzip. OK, nic wielkiego - Zmieniłem go <packaging>pom</packaging> aby pozbyć się niepotrzebnych słoika, że ​​jest inaczej utworzonego w docelowym katalogu

Moim głównym problemem jest to, że pliki, które pakuję do ZIP, są zagnieżdżone w kilku katalogach, ale muszę umieścić je w głównym katalogu ZIP. Oto mój plik montaż:

<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> 

Kiedy uruchomić ten - Wezmę plik ZIP, ale pliki będą zagnieżdżane zaczynające się od C: \, a następnie pełną ścieżką. Aby dać ci pomysł - projekt zrzuca to pliki binarne w następującej strukturze ProjectFoo\ProjectFoo\subproject1\Bin\Release\foo.dll i muszę ZIP\foo.dll

Tutaj jest plugin montaż konfigurację:

<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> 

Może po prostu trzeba użyć antrun i wykonać ant zip zadanie?

Odpowiedz

27

Jak widać, nie ma typowego opakowania na suwak, więc warto użyć opakowania pom, tak jak wybrałeś.

Napotkano niewielką dziurę w przetwarzaniu wtyczki zespołu. Można to rozwiązać, określając wiele zestawów plików w zestawie z <outputDirectory>/<outputDirectory>, po jednym dla każdego katalogu, który ma zostać dołączony, jest to oczywiście PITA i prawdopodobnie nie jest to dopuszczalne rozwiązanie.

Alternatywnym rozwiązaniem jest użycie zadania kopiowania antywirusowego w celu skopiowania wszystkich bibliotek DLL do katalogu pomostowego, a następnie uwzględnienie tego katalogu w zespole.

Poniższa konfiguracja powinna robić to, co jesteś po:

The konfiguracji antrun-plugin:

<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> 

Zespół:

<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

Dokładnie to, co potrzebne! Dziękuję Rich! – Bostone

+0

Serdecznie zapraszamy. –

+0

Jest jeszcze jeden problem. Zip nadal utrzymuje jeden z najlepszych katalogów typu "artifactId-Version". Kiedy rozpakowuję zip, wszystkie moje pliki nie kończą się na '/' ale w '/ Foo-1.0-SNAPSHOT /'. Jednak pliki są poprawnie skopiowane do docelowego/dll-staging. – Bostone