3

我使用模型-视图-控制器模式开发了一个 webapp。该model包代表应用程序的核心 API,可以独立使用。和包使用包controller来生成一个webapp。viewmodel

问题: 我希望能够只构建一个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/

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

谢谢你的帮助。

4

2 回答 2

7

看看Maven 程序集插件

有了它,您可以根据需要拥有尽可能多的不同程序集描述符,每一个都使用自己的打包方案文件集依赖项进行定制。


这是您的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>

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

于 2013-01-26T01:27:09.760 回答
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>
于 2013-01-26T05:58:14.193 回答