Maven:生成整个项目的WAR,以及特定包的JAR

FBB*_*FBB 3 java maven

我使用模型 - 视图 - 控制器模式开发webapp.该model软件包代表了应用程序的核心API,可以独立使用.在controller与view包使用的model包装制作web应用程序.

问题: 我希望能够构建仅model包的JAR 和三个包的WAR.我想将这三个包保存在同一个项目中.与独立JAR相比,webapp WAR将包括补充库.我怎么能用Maven实现这个目标?是否有一个解决方案使用两个单独的pom.xml文件?(因为据我所知,你不能packaging在pom.xml中选择两个选项)

(我已经看到了这个问题,但我真的希望我的三个软件包成为同一个项目的一部分,并且属于同一个目录.)

此外,我的项目使用经典的webapp结构(这里简化):

my-app
-- pom.xml
-- src
----- main/
-------- java/
----------- model/
----------- view/
----------- controller/
-------- webapp/
---------- WEB-INF/
-------------classes/
Run Code Online (Sandbox Code Playgroud)

我可以设法在经典target/目录中生成JAR,在经典目录中生成webapp src/main/webapp/吗?(并且,根据要求,包括不同的图书馆)

谢谢你的帮助.

Ant*_*oly 7

看看Maven Assembly Plugin.

有了它,您可以根据需要拥有尽可能多的不同程序集描述符,每个程序集都有自己的打包方案,文件集和依赖项.


以下是pom.xml的示例插件配置:

<build>
  <plugins>
     <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <configuration>
            <descriptors>
               <descriptor>src/main/assembly/model.xml</descriptor>
            </descriptors>
        </configuration>
     </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

以及模型 jar 的示例程序集描述符(src/main/assembly/model.xml)

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>model</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}/model</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>**/*</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>
Run Code Online (Sandbox Code Playgroud)

Running mvn clean package assembly:single将生成项目pom.xml中的标准my-app.war文件和目标包中的my-app-model.jar.