我使用模型 - 视图 - 控制器模式开发webapp。 model
包表示应用程序的核心API,可以单独使用。 controller
和view
包使用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吗? (并且,根据要求,包括不同的图书馆)
感谢您的帮助。
答案 0 :(得分:7)
有了它,您可以根据需要拥有尽可能多的程序集描述符,每个自定义包装方案,文件集和< 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>