2012-04-17 38 views
5

我們有兩個不同的項目。而且兩個項目的控制器幾乎相同。如何在項目中生成jar和war

項目A裏面有控制器。因此爲它生成戰爭並不是問題。

但是項目B需要Controller的jar項目A控制器。

任何機構能告訴我如何從項目A的控制器生成jar文件,我可以在項目B中使用它?

+1

[maven部署其他jar文件]的可能的重複(http://stackoverflow.com/questions/754216/maven-deploy-additional-jar-file) – 2013-11-12 08:05:18

回答

13

這樣的事情的默認解決方案是有兩個單獨的模塊一個用於戰爭和一個用於控制器模塊。不要開始與Maven戰鬥。

+1

你的意思是說我應該寫兩個pom文件一個用於生成jar文件和其他戰爭文件? – 2012-04-17 11:27:52

+0

最好的辦法是創建一個包含兩個模塊(war,controller)和父類的多模塊版本。 – khmarbaise 2012-04-17 11:29:11

+3

但你也可以使用我在這裏描述的解決方案:http://stackoverflow.com/a/10189767/296328 – khmarbaise 2012-04-17 11:30:32

-2

您既可以在同一個項目中,也安裝, 1.要生成JAR產生,使用Maven-JAR-插件 2.安裝罐,使用Maven安裝,插件 3.要部署罐,使用Maven -deploy-plugin

注意:使用type作爲war,默認情況下它會生成項目的war文件。下面

檢查更多的詳細配置: http://communitygrids.blogspot.in/2007/11/maven-making-war-and-jar-at-same-time.html

+2

你的回答很混亂。你可以嘗試重寫它嗎? – Zero3 2016-01-15 08:48:03

0

保持項目A的包裝爲戰爭。將maven jar插件添加到項目A的pom.xml中。使用「mvn clean package jar:jar」構建項目。它會創造一個罐子和戰爭。

0

正如@Shashank指出的那樣,你可以讓maven執行maven-jar-plugin。但是,這隻會創建一個JAR,它只包含編譯的類,而不包含webapp源。

有簡單的方法如何做到這一點的只是一個簡單的mvn clean install命令多模塊項目,而不明確地調用mvn clean install jar:jar

只需添加maven-jar-plugin>build>plugins並調用它的「一攬子」階段:

<project> 
    <packaging>war</packaging> 
    <!-- .. --> 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <classifier>classes</classifier> 
     </configuration> 
     <executions> 
      <execution> 
      <id>package-jar</id> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

這將創建一個大的.war和一個較小的-classes.jar工件。

更新2017年6月15日:如果在另一方面,你需要的WAR文件(不僅是包裝的java類),這是一種僞裝成一個JAR文件精確副本 ,您可以使用maven-dependency-pluginmaven-install-plugin的組合來創建WAR的JAR副本。 (我正好需要這樣一個解決方案 - 不要問爲什麼;))

創建一個戰模塊上dependend一個新的模塊:

<project> 
    <!-- ... --> 
    <dependencies> 
    <!-- ... --> 
    <dependency> 
     <groupId>your-group-id-here</groupId> 
     <artifactId>your-war-artifact-id-here</artifactId> 
     <version>${project.version}</version> 
     <type>war</type> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>copy</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <artifactItems> 
      <artifactItem> 
       <groupId>your-group-id-here</groupId> 
       <artifactId>your-war-artifact-id-here</artifactId> 
       <version>${project.version}</version> 
       <type>war</type> 
       <overWrite>true</overWrite> 
       <destFileName>jar-copy-of-war.jar</destFileName> 
      </artifactItem> 
      </artifactItems> 
      <overWriteReleases>false</overWriteReleases> 
      <overWriteSnapshots>true</overWriteSnapshots> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-install-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>install-copy-of-war</id> 
      <phase>install</phase> 
      <goals> 
       <goal>install-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <classifier>copy-of-war</classifier> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>your-group-id-here</groupId> 
       <version>${project.version}</version> 
       <file>${project.build.directory}/dependency/jar-copy-of-war.jar</file> 
       <generatePom>true</generatePom> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

這將創建的副本戰爭,把它命名爲「--copy-of-war.jar」,而「戰爭副本」是這個模塊的分類器。

相關問題