2011-09-23 31 views
7

我有一個maven項目,我正在建立一個戰爭文件,但我也使用maven-jar-plugin在同一個項目中構建一個jar。maven構建與戰爭和罐推奇怪的文物內部回購

- DISCLIMER - 我知道這不是「正確」的方式,但是在將其分割爲jar項目和一些單獨的第三方插件的戰爭項目時,還會出現其他一些問題。

我看到一些奇怪的行爲。以下是我的項目結構。

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

當我建這個項目,我得到了我的目標目錄中的正確的戰爭和jar文件,但是在我的本地回購的.m2奇怪的事情發生了。安裝的war文件的名稱是正確的war-jar-0.0.1-SNAPSHOT.war,但該文件的內容是我的jar文件的內容。這也會發生,如果我做相反的事情。即如果我設置我的項目來構建一個jar並使用maven-war-plugin來構建戰爭,我的目標目錄中的存檔是正確的,但是我的本地repo具有包含我的war文件內容的j​​ar文件。以下是我正在使用的pom文件。

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

爲此的控制檯輸出如下所示,它顯示該jar正在作爲戰爭上傳。

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 我得到這個工作,但我不得不改變我的「讓-A-JAR」執行的階段,從包安裝。這工作正常,正確的工件上傳,但我仍然困惑,爲什麼這有所作爲。很顯然,工件是在不同的生命週期階段生成的,因此不在項目的原始安裝時間附近,因此不會上傳錯誤的文件。這看起來像一個'黑客',我想明白爲什麼這是這樣的行爲。

+0

你用來建立jar/war的命令是什麼? mvn安裝? –

+0

是在項目上安裝mvn。 – broschb

回答

4

我回答我自己的問題,因爲我沒有得到任何幫助我獲得解決方案的信息。在我的原始問題上查看我的解決方案的更新。

2

您需要指定maven-install-plugin的配置才能實現此目的。在<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

這不完全是。這會將我的jar安裝到回購站中。我有這個,但刪除它使我的例子儘可能簡單。我可以同時獲得jar和war到repo,問題是我的war文件包含應該在jar文件中的內容。我已經用描述這個的控制檯輸出更新了我的原始問題。 – broschb

4

這也適用,

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

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

弄清楚爲什麼你的項目表現爲是,分析有效POM。

相關問題