2011-09-23 6 views
7

Mam projekt maven, gdzie buduję plik wojenny, ale używam również maven-jar-plugin do budowy słoika w tym samym projekcie.maven zbudować z wojny i słoika popychając dziwne artefakty do wewnętrznej repo

--DISCLAIMER-- Wiem, że nie jest to "poprawny" sposób, aby to zrobić, ale są jeszcze inne problemy podczas dzielenia tego na projekt jar i oddzielny projekt wojenny z niektórymi wtyczkami innych firm.

Widzę w tym dziwne zachowanie. Poniżej znajduje się moja struktura projektu.

warproject 
-src 
--main 
---webapp 
----WEB-INF 
-----web.xml 
---java 
----com.test.myclass 
-----test.java 
-pom.xml 

Kiedy budować ten projekt, i uzyskać prawidłowy wojnę i plik jar w moim katalogu docelowego, jednak w moim lokalnym .m2 repo coś dziwnego dzieje. Plik wojny, który jest zainstalowany, nosi nazwę poprawnie war-jar-0.0.1-SNAPSHOT.war, jednak zawartość tego pliku jest zawartością mojego pliku JAR. Dzieje się tak również, gdy robię odwrotność. tj. jeśli skonfiguruję mój projekt do zbudowania słoika i użyjemy wtyczki maven-war do zbudowania wojny, archiwa w moim katalogu docelowym są poprawne, ale moje lokalne repozytorium ma plik jar z zawartością mojego pliku wojennego. Poniżej znajduje się plik pom, którego używam.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>war-jar</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <jarName>${project.artifactId}-${project.version}-client</jarName> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-a-jar</id> 
         <phase>package</phase> 
         <goals> 
          <goal>jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     <resources> 
      <resource> 
       <directory>src/main/java</directory> 
      </resource> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
     </resources> 
    </build> 

</project> 

Wyjście konsoli jest następujące, pokazuje, że jar jest przesyłany jako wojna.

Installing /home/me/work/src/war-jar/target/war-jar-0.0.1-SNAPSHOT.jar to /home/me/.m2/repository/com/test/war-jar/0.0.1-SNAPSHOT/war-jar-0.0.1-SNAPSHOT.war 

--update dostałem tej pracy, ale musiałem zmienić fazę mojego „make-a-jar” wykonanie instalacji z pakietu. Działa to dobrze, a prawidłowe artefakty są przesyłane, ale wciąż nie rozumiem, dlaczego to robi różnicę. Oczywiście artefakt jest generowany w innej fazie cyklu życia, a zatem nie występuje w czasie oryginalnej instalacji dla projektu, dlatego niewłaściwy plik nie jest przesyłany. To wydaje się być "hack" i chciałbym zrozumieć, dlaczego tak się zachowuje.

+0

Jakiej komendy używasz do budowania słoika/wojny? instalacja mvn? –

+0

Tak zainstalować mvn na projekcie. – broschb

Odpowiedz

4

Odpowiadam na własne pytania, ponieważ nie otrzymałem żadnych informacji, które pomogłyby mi znaleźć rozwiązanie. Zobacz moją aktualizację oryginalnego pytania dotyczącego mojego rozwiązania.

2

Musisz określić konfiguracje wtyczki maven-install, aby to osiągnąć. Dodaj następującą konfigurację wtyczki pod numerem <build>.

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <goals> 
         <goal>install-file</goal> 
        </goals> 
        <configuration> 
         <packaging>jar</packaging> 
         <artifactId>${project.artifactId}</artifactId> 
         <groupId>${project.groupId}</groupId> 
         <version>${project.version}</version> 
         <file> 
          ${project.build.directory}/${project.artifactId}-${project.version}.jar 
         </file> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+0

To nie całkiem to. Spowoduje to zainstalowanie mojego słoika w repozytorium. Miałem to, ale usunąłem, aby mój przykład był tak prosty jak to tylko możliwe. Mogę dostać zarówno słoik jak i wojnę do repo, problem polega na tym, że mój plik wojenny zawiera zawartość, która powinna znajdować się w pliku JAR. Zaktualizowałem moje oryginalne pytanie za pomocą wyjścia konsoli opisującego to. – broschb

4

Działa to również,

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <executions> 
    <execution> 
     <!-- 
     When also running maven-jar-plugin correct maven-war-plugin's ID 
     from "default-war" to "default-jar" 
     --> 
     <id>default-jar</id> 
     <phase>package</phase> 
     <goals><goal>war</goal></goals> 
     <configuration> 
     ... 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Patrz http://maven.apache.org/guides/mini/guide-default-execution-ids.html

Aby dowiedzieć się, dlaczego Twój projekt zachowuje się jak jest, analizować Skuteczne POM.

Powiązane problemy