目标:webapp_aggregator为聚合和父pom工程,不包含代码和资源,webapp为主web工程,webapp_module1为子web工程,webapp_common为基础子工程,两个web工程都依赖该工程。打包后webapp和webapp_module1合并为1个war包webapp.war,并且自动发布到tomcat,支持断点调试。

依赖关系:webapp->webapp_module1; webapp->webapp_common; webapp_module1->webapp_common。

1,eclipse新建maven quickstart工程webapp_aggregator和webapp_common, 新建maven web工程webapp和webapp_module1,每个工程点击properties->java build path, properties->java compiler保证选择了正确的jdk版本(如果是jre版本编译时会出错,需要点击windows->preferences->java->installed jres,改为jdk的目录),点击properties->project facets,选择正确的java版本,如果是web工程,需要选择dynamic web module的版本和runtimes(apache tomcat v8.0)。

2,webapp_aggragator工程pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<name>webapp_aggregator</name>
<url>http://maven.apache.org</url> <groupId>com.xf</groupId>
<artifactId>webapp_aggregator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 该工程为java工程,此工程只是作为聚合和父工程,打包类型为pom,其它子工程继承该工程的pom,包括相关的依赖 -->
<packaging>pom</packaging> <!-- 通过modules标签聚合3个子工程,依赖关系为webapp->webapp_module,这两个工程为web工程,同时这两个工程都依赖webapp_common工程,webapp_common工程为java工程 -->
<modules>
<!-- 父工程和子工程在同一个工作空间下,所以用相对路径即可 -->
<module>../webapp</module>
<module>../webapp_module1</module>
<module>../webapp_common</module>
</modules> <properties>
<!-- 指定工程编译后的编码格式为UTF-8,默认是GBK,所以要指定后才是UTF-8 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <build>
<plugins>
<!-- 该插件可解决maven update后jre变为1.5的问题 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build> <!-- 以下依赖都会被子工程继承 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.7.Final</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
</project>

3,webapp工程pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<url>http://maven.apache.org</url>
<name>webapp Maven Webapp</name> <artifactId>webapp</artifactId>
<!-- web工程打包类型为war -->
<packaging>war</packaging> <!-- 继承webapp_aggregator的pom配置 -->
<parent>
<groupId>com.xf</groupId>
<artifactId>webapp_aggregator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../webapp_aggregator</relativePath>
</parent> <build>
<!-- 打包后target目录下的工程名称 -->
<finalName>webapp</finalName>
<plugins>
<!-- 该插件用于合并多个web工程为一个war,该插件只需要在主工程中配置即可,此处主工程为webapp,子工程为webapp_module1 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- 必须配置此项,否则打包后的web.xml可能是某个子工程的,该配置用于排除打包overlays标签中配置的工程的web.xml,对所有overlays标签中的工程有效 -->
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
<overlays>
<overlay>
<groupId>com.xf</groupId>
<artifactId>webapp_module1</artifactId>
</overlay>
<!-- 如果overlay中什么都不写,表示该overlay代表的是当前工程,即当前pom.xml所在的工程webapp,一般情况下不要加入当前工程
<overlay>
</overlay>
-->
</overlays>
</configuration>
</plugin> <!-- 该插件用于将工程发布到tomcat,tomcat需要处于运行状态,另外如果是多web工程聚合项目,主工程和所有依赖的子工程都要配置该插件,否则发布的时候会报错 -->
<!-- 相关的maven发布命令为 tomcat:redeploy 或 tomcat:deploy -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<!-- 此处为固定配置 适用于tomcat8 -->
<url>http://localhost:8080/manager/text</url>
<!-- 此处的myTomcat对应Apache maven安装目录的conf/setting.xml中的server配置
<servers>
<server>
<id>myTomcat</id>
<username>tomcat</username>
<password>tomcat</password>
</server>
</servers>
另外要注意,tomcat8 server的tomcat-users.xml中配置的role一定要加上manager-script角色,否则会发布失败,标准写法为
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user password="tomcat" roles="manager-gui,manager-script" username="tomcat"/>
在eclipse创建的Servers的tomcat-users.xml中更改即可,启动后会自动同步到tomcat安装目录的tomcat-users.xml
-->
<server>myTomcat</server>
<!-- 配置该项后发布到tomcat webapps目录下的war包为webapp.war,如果不设置会默认生成ROOT.war -->
<path>/webapp</path>
</configuration>
</plugin>
</plugins>
</build> <!-- 当前项目需要的依赖,注意由于继承了webapp_aggregator工程的pom.xml,所以webapp_aggregator中已有的依赖不需要再重新配置 -->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<!-- 如果版本是3.1,前面必须加javax前缀 -->
<artifactId>javax.servlet-api</artifactId>
<!-- 此处的版本必须小于等于当前工程(webapp)->properties->project facets->dynamic web module->version的版本号,否则编译会报错 -->
<!-- 如果project facets中的dynamic web module的version无法更改到3.1,那么需要更改几处地方:
1,当前工程的web.xml的正确标准模板为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
</web-app>
2,依赖jdk为1.7或以上
3,maven插件最好都为最新版
4,当前工程.settings/org.eclipse.wst.common.project.facet.core.xml中的jst.web的version更改为3.1 <installed facet="jst.web" version="3.1"/>
5,运行maven update后即可
-->
<version>3.1.0</version>
<!-- 因为运行时该jar包在tomcat中已经存在,所以不需要打包该jar,用provide scope即可 -->
<scope>provided</scope>
</dependency>
<!-- 依赖webapp_common工程 -->
<dependency>
<groupId>com.xf</groupId>
<artifactId>webapp_common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 依赖webapp_module1工程,因为要合并到主工程war包中,所以type为war -->
<dependency>
<groupId>com.xf</groupId>
<artifactId>webapp_module1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
</dependencies>
</project>

4,webapp_module1工程pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<name>webapp_module1 Maven Webapp</name>
<url>http://maven.apache.org</url> <artifactId>webapp_module1</artifactId>
<!-- web工程打包类型为war -->
<packaging>war</packaging> <!-- 继承webapp_aggregator的pom配置 -->
<parent>
<groupId>com.xf</groupId>
<artifactId>webapp_aggregator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../webapp_aggregator</relativePath>
</parent> <build>
<!-- 打包后target目录下的工程名称 -->
<finalName>webapp_module1</finalName>
<plugins>
<!-- 该插件用于将工程发布到tomcat,tomcat需要处于运行状态,另外如果是多web工程聚合项目,主工程和所有依赖的子工程都要配置该插件,否则发布的时候会报错 -->
<!-- 相关的maven发布命令为 tomcat:redeploy 或 tomcat:deploy -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<!-- 此处为固定配置 适用于tomcat8 -->
<url>http://localhost:8080/manager/text</url>
<!-- 此处的myTomcat对应Apache maven安装目录的conf/setting.xml中的server配置
<servers>
<server>
<id>myTomcat</id>
<username>tomcat</username>
<password>tomcat</password>
</server>
</servers>
另外要注意,tomcat8 server的tomcat-users.xml中配置的role一定要加上manager-script角色,否则会发布失败,标准写法为
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user password="tomcat" roles="manager-gui,manager-script" username="tomcat"/>
在eclipse创建的Servers的tomcat-users.xml中更改即可,启动后会自动同步到tomcat安装目录的tomcat-users.xml
-->
<server>myTomcat</server>
<!-- 配置该项后发布到tomcat webapps目录下的war包为webapp.war,如果不设置会默认生成ROOT.war -->
<path>/webapp</path>
</configuration>
</plugin>
</plugins>
</build> <!-- 当前项目需要的依赖,注意由于继承了webapp_aggregator工程的pom.xml,所以webapp_aggregator中已有的依赖不需要再重新配置 -->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<!-- 如果版本是3.1,前面必须加javax前缀 -->
<artifactId>javax.servlet-api</artifactId>
<!-- 此处的版本必须小于等于当前工程(webapp)->properties->project facets->dynamic web module->version的版本号,否则编译会报错 -->
<!-- 如果project facets中的dynamic web module的version无法更改到3.1,那么需要更改几处地方:
1,当前工程的web.xml的正确标准模板为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
</web-app>
2,依赖jdk为1.7或以上
3,maven插件最好都为最新版
4,当前工程.settings/org.eclipse.wst.common.project.facet.core.xml中的jst.web的version更改为3.1 <installed facet="jst.web" version="3.1"/>
5,运行maven update后即可
-->
<version>3.1.0</version>
<!-- 因为运行时该jar包在tomcat中已经存在,所以不需要打包该jar,用provide scope即可 -->
<scope>provided</scope>
</dependency>
<!-- 依赖webapp_common工程 -->
<dependency>
<groupId>com.xf</groupId>
<artifactId>webapp_common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

5,webapp_common工程pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<name>webapp_common</name>
<url>http://maven.apache.org</url> <artifactId>webapp_common</artifactId>
<!-- java普通工程,打包类型为jar -->
<packaging>jar</packaging> <!-- 继承webapp_aggregator的pom配置 -->
<parent>
<groupId>com.xf</groupId>
<artifactId>webapp_aggregator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../webapp_aggregator</relativePath>
</parent> <build>
<!-- 打包后target目录下的工程名称 -->
<finalName>webapp_common</finalName>
</build>
</project>

5,eclipse下加入debug需要的source,点击debug configurations->apache tomcat->tomcat v8.0 at localhost->source->add,将相关的工程source添加进来,点击debug按钮启动tomcat。

6,点击debug configurations->maven build->webapp_aggregator(如果没有需要new一个),basedirectory选择webapp_aggregator所在的目录,goals中填写clean package tomcat:redeploy -e,-e参数表示打印异常。点击debug按钮即可完成编译、打包和发布到tomcat。

ps:每次pom.xml更改后,运行maven update命令更新一下。

maven多工程构建与打包的更多相关文章

  1. [maven] 实战笔记 - 构建、打包和安装maven

    ① 手工构建自己的maven项目 Maven 项目的核心是 pom.xml.POM (Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等 ...

  2. Maven创建Web工程并执行构建/测试/打包/部署

    创建工程基本参考上一篇Java Application工程,不同的是命令参数变了,创建Web工程的命令如下: mvn archetype:generate -DgroupId=com.jsoft.te ...

  3. 构建Maven聚合工程

    最近,准备构建一个Maven的项目,基于模块化的结构思想,决定使用Maven的聚合工程进行构建. 环境准备: (1)eclipse 这里推荐使用spring封装的eclipse(即STS) ,STS中 ...

  4. maven 聚合工程的创建和打包

    ---恢复内容开始--- 使用eclipse创建maven项目 第一步:创建父工程hg-parent,如图; 右击空白处,new创建新maven工程: 搜索maven项目 父工程使用pom打包方式 第 ...

  5. Maven的构建/测试/打包

    继上一篇http://www.cnblogs.com/EasonJim/p/6809882.html使用Maven创建工程后,接下来是使用Maven进行构建/测试/打包. 在打包之前,先熟悉一下Mav ...

  6. 构建Maven父子工程

    IDEA构建maven父子工程:  1.打开IDEA,Create New Project 如图:   如果没有弹出新建界面,可以先 file-->Close Project 如图: 2.创建父 ...

  7. SpringCloud核心教程 | 第二篇: 使用Intellij中的maven来快速构建Spring Cloud工程

    spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环 ...

  8. Maven学习---使用maven进行项目构建

    1. 使用maven进行项目构建 MyEclipse 自带maven 插件 Eclipse 需要单独安装maven插件 1.1. Maven 在企业中怎么用的 ? Maven : 项目构建工具 ,进行 ...

  9. 如何使用jenkins部署maven父子工程

    最近使用jenkins自动部署项目时遇到一个问题,如果部署单个的maven工程,没有什么问题, 但是在部署maven创建的父子工程,如果只从svn或者git上拉取子工程源码时,会报找不到父 工程pom ...

随机推荐

  1. Python builtins

    >>> dir (__builtins__) ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseExcepti ...

  2. 同名域中计算机之间RDP问题

    今天遇到一个奇葩问题 server1 在domain1中 server2 在domain2中 domain1 和domain2的名字一样,然后从server1去RDP到server2,你是无论如何都无 ...

  3. 静态库不要strip 太厉害

    根据strip的功能表示,strip经常用来去除目标文件中的一些符号表.调试符号表信息,减少包的大小.我自己做了一函数库,同样的代码生成了一个mylib.so和一个mylib.a文件,之后使用了 st ...

  4. 黄聪:wordpress源码解析-目录结构-文件调用关系(转)

    Wordpress是一个单入口的文件,所有的前端处理都必须经过index.php,这是通过修改web服务器的rewrite规则来实现的.这种做法的好处是显而易见的,这样URL更好看,不必为每一个url ...

  5. 黄聪:360浏览器如何使用插件实现解除网页禁用右键复制的限制(Enable Copy)

    使用Enable Copy插件即可. 插件下载:Enable-Copy_v1.15.rar

  6. iphone dev 入门实例7:How to Add Splash Screen in Your iOS App

    http://www.appcoda.com/how-to-add-splash-screen-in-your-ios-app/ What’s Splash Screen? For those who ...

  7. Android.mk

    Introduction: Android.mk编译文件是用来向Android NDK描述你的C,C++源代码文件的, 这篇文档描述了它的语法.在阅读下面的内容之前,假定你已经阅读了docs/OVER ...

  8. PO_PO系列 - 询价报价单管理分析(案例)

    2014-07-01 Created By BaoXinjian

  9. python (1)一个简单的爬虫: python 在windows下 创建文件夹并写入文件

    1.一个简单的爬虫:爬取豆瓣的热门电影的信息 写在前面:如何创建本来存在的文件夹并写入 t_path = "d:/py/inn" #本来不存在inn,先定义路径,然后如果不存在,则 ...

  10. uboot 的内存命令使用 mw (修改) md (显示)

    修改:mw [内存地址] [值] [长度] 例如:mw 0x02000000 0 128 表示修改地址为0x02000000~0x02000000+128的内存值为0. 显示:md [内存地址] [长 ...