2012-04-17 17 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”,而“战争副本”是这个模块的分类器。

相关问题