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

时间:2013-01-26 01:23:10

标签: java maven

我使用模型 - 视图 - 控制器模式开发webapp。 model包表示应用程序的核心API,可以单独使用。 controllerview包使用model包生成网络应用。

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

(我见过this question,但我真的希望我的三个软件包成为同一个项目的一部分,并且属于同一个目录。)

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

my-app
-- pom.xml
-- src
----- main/
-------- java/
----------- model/
----------- view/
----------- controller/
-------- webapp/
---------- WEB-INF/
-------------classes/

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

看看Maven Assembly Plugin

有了它,您可以根据需要拥有尽可能多的程序集描述符,每个自定义包装方案文件集和< EM>依赖关系


以下是 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>

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

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

答案 1 :(得分:3)

我认为你会更喜欢“war”作为项目的默认包装,更简单的方法就是使用maven-jar-plugin:

       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jar-plugin</artifactId>
           <version>2.4</version>
           <executions>
               <execution>
                   <phase>package</phase>
                   <goals>
                       <goal>jar</goal>
                   </goals>
                   <configuration>
                       <classifier>weibo4j</classifier>
                       <includes>
                           <include>model/**</include>
                       </includes>
                   </configuration>
               </execution>
           </executions>
       </plugin>