我们有两个不同的项目。并且控制器在两个项目中几乎相同。
项目 A 里面有控制器。所以为它制造战争不是问题。
但是项目 B 需要控制器的项目 A 控制器的 jar。
任何人都可以告诉我如何从项目 A 的控制器生成可以在项目 B 中使用的 jar 文件吗?
我们有两个不同的项目。并且控制器在两个项目中几乎相同。
项目 A 里面有控制器。所以为它制造战争不是问题。
但是项目 B 需要控制器的项目 A 控制器的 jar。
任何人都可以告诉我如何从项目 A 的控制器生成可以在项目 B 中使用的 jar 文件吗?
这种事情的默认解决方案是有两个独立的模块,一个用于战争,一个用于控制器模块。不要开始与 Maven 战斗。
正如@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-plugin
和的组合maven-install-plugin
创建 WAR 的 JAR 副本。(我恰好需要这样的解决方案——不要问为什么;))
创建一个依赖于war模块的新模块:
<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”,而“copy-of-war”是该模块的分类器。
保持项目 A 的包装为战争。将 maven jar 插件添加到项目 A 的 pom.xml 中。使用“mvn clean package jar:jar”构建项目。它将创造一个罐子和战争。