maven 多工程搭建演示
maven出现后,很多公司会用maven来构建项目,单仅仅只是单项目单工程的
并没有使用多工程来构建,这样在以后,项目越来越大,业务越来越多以后,项目会难以维护,越发庞大,维护成本提高,团队士气也会下降
等等情况,使用maven构建多工程就是如今的趋势
这边演示一个maven工程相互依赖的例子,高手轻拍,大家互相学习,有不足之处请指出
1.新建demo-parent项目,作为父工程


选择quickstart


修改pom中的jar改为pom,这样的意思是当前工程为父工程,可以再其下创建子工程

2.新建demo-project-web,作为web工程,这个工程是总的web工程,下面将会包含另外2个子web工程


选择webapp作为web工程


3.同理创建demo-project-customer-web作为子web工程(webapp),这个工程是一个独立web工程,他包含了service,dao
4.同理创建demo-project-gods-web作为子web工程(webapp),这个工程将有一个demo-project-gods-core作为后台(core就是包含了service,dao)
5.创建demo-project-gods-core作为子工程(quickstart),依赖demo-project-gods-web
6.创建demo-common,作为子工程(quickstart),作用是工具包,可被其他工程依赖引用
3-6步骤略,生成项目如下图:

父工程pom会成这样:
<modules>
<module>demo-project-web</module>
<module>demo-project-gods-web</module>
<module>demo-project-customer-web</module>
<module>demo-project-gods-core</module>
<module>demo-common</module>
</modules>
好,那么现在来做工程之间的依赖
首先,demo-project-web作为顶级web项目,所有的子web项目打包后都会整合在此(如果同名文件则被顶级覆盖,如果顶级没有同名文件,但是子web有同名文件,则按照依赖顺序被优先依赖的同名文件覆盖)
pom如下:
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion> <parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent> <groupId>com.demo</groupId>
<artifactId>demo-project-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo-project-web Maven Webapp</name>
<url>http://maven.apache.org</url> <dependencies> <!-- 增加要合并的war包依赖 -->
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-project-gods-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-project-customer-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> </dependencies> <build> <finalName>demo-project-web</finalName> <plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- 把另外2个web子工程加入进来, 合并war -->
<overlays>
<overlay>
<groupId>com.demo</groupId>
<artifactId>demo-project-gods-web</artifactId>
</overlay>
<overlay>
<groupId>com.demo</groupId>
<artifactId>demo-project-customer-web</artifactId>
</overlay>
</overlays>
</configuration>
</plugin> </plugins>
</build> </project>
修改demo-project-gods-web的pom,添加自身依赖core作为service以及DAO
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.demo</groupId>
<artifactId>demo-project-gods-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo-project-gods-web Maven Webapp</name>
<url>http://maven.apache.org</url> <dependencies> <!-- 引入依赖, core中包含service以及DAO -->
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-project-gods-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> </dependencies> <build>
<finalName>demo-project-gods-web</finalName>
</build>
</project>
在customer中添加工具类依赖
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.demo</groupId>
<artifactId>demo-project-customer-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo-project-customer-web Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies> <!-- 添加common工具类依赖 -->
<dependency>
<groupId>com.demo</groupId>
<artifactId>demo-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> </dependencies>
<build>
<finalName>demo-project-customer-web</finalName>
</build>
</project>
============进入代码阶段============
parent是父工程,不需要编写代码
demo-common:
package org.demo.common;
import java.util.Date;
public class DateUtil {
public static void showTime(String name) {
System.out.println("Run in demo-common - Hello ~ " + name + ", it is " + new Date().toString());
}
}
demo-project-customer-web:
package com.demo.project.customer.web;
import org.demo.common.DateUtil;
public class AbcService {
public static void getDateService(String name) {
DateUtil.showTime(name);
System.out.println("Run in demo-project-customer-web...");
}
}
customer.jsp
<?xml version="1.0" encoding="UTF-8" ?>
<%@page import="com.demo.project.customer.web.AbcService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<%
System.out.print("hello demo-project-customer-web customer.jsp");
AbcService.getDateService("abc");
%> </body>
</html>
demo-project-gods-core:
package org.demo.project.gods.core;
public class Gods {
public static void getDateService(String name) {
System.out.println("Run in demo-project-gods-core...");
}
}
demo-project-gods-web
index.jsp
<?xml version="1.0" encoding="UTF-8" ?>
<%@page import="org.demo.project.gods.core.Gods"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body> <%
System.out.print("hello demo-project-gods-web gods.jsp");
Gods.getDateService("nathan"); %>
</body>
</html>
run - mvn install:

运行成功,进入相应的页面则成功
maven 多工程搭建演示的更多相关文章
- ecplise maven springmvc工程搭建
转载自:https://www.cnblogs.com/crazybirds/p/4643497.html 内网上网代理配置: 第一步:新建maven项目,选择Maven Project,如图1. ...
- 001淘淘商城项目:项目的Maven工程搭建
开始一个新的项目,特此记录,资料全部来源于传智播客,感谢. 我们要做一个类似电商的项目.用maven做管理. maven里面主要分为三种工程: 1:pom工程:用在父级工程,聚合工程中 2:war工程 ...
- maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...
- 单工程搭建springmvc+spring+mybatis(maven,idea)
单工程搭建springmvc+spring+mybatis(maven,idea) 1.pom.xml <properties> <project.build.sourceEncod ...
- 【曹工杂谈】Maven源码调试工程搭建
Maven源码调试工程搭建 思路 我们前面的文章<[曹工杂谈]Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗>分析了Maven大体的执行阶段,主要包括三个阶段: 启动类阶段,负责 ...
- maven工程运行演示
通过maven提供的命令来运行maven工程,体会maven构建工程的优点. (1)运行web工程 进入maven工程目录(当前目录有pom.xml),运行tomcat:run命令 可能出现的问 ...
- (转)淘淘商城系列——使用maven构建工程
http://blog.csdn.net/yerenyuan_pku/article/details/72669269 开发工具和环境 这里,我统一规范一下淘淘商城的开发工具和环境,如下: Eclip ...
- Maven+STS工程中Maven Dependencies 文件夹丢失问题
在我们使用Maven+sts工程中偶尔会出现这种情况: Maven Dependencies文件夹在新打开的工程中丢失,造成 web project 自动编译出错,缺少必要的库文件: 如下图所示的情况 ...
- 某马-某淘商城的day01--->分析,工程搭建,tomcat插件启动工程,svn,反思
-1:为什么还要写某马的某淘商城呢? 答:万物更新,季节交替.新人总把旧人换.所以呢,前人写了N多遍的东西,我们依旧在学,所以下决心写某马的某淘商城.(也因为在学校还没找工作,所以找个相对长期的事情做 ...
随机推荐
- memcache与memcached扩展的区别
一.服务端 之前理解错误了.服务端只有一个memcache,一般把服务端称作memcached(带d),是因为守护进程的名称就是叫做memcached(一个这样的执行程序文件). 编写的语言:c语言 ...
- stl空间配置器线程安全问题补充
摘要 在上一篇博客<STL空间配置器那点事>简单介绍了空间配置器的基本实现 两级空间配置器处理,一级相关细节问题,同时简单描述了STL各组件之间的关系以及设计到的设计模式等. 在最后,又关 ...
- 为什么不推崇复杂的ORM
上一篇文章写完,回复的人很多,有的说的很中肯,有的貌似只是看到文章的标题就进来写评论的!还有人问为什么我要屏蔽掉[反对]按钮,因为谁写文章都是为了分享,都在说出自己的心得体会.不过由于大家遇到的项目, ...
- [mysql] 一次sql耗时高引发报警的分析和处理
1.现象: 最近两天在每天的凌晨0:15-20分左右收到报警短息,报警内容: JDBC-SQL请求最近三分钟内平均耗时时间过高的报警,监控类型:SQL... 2.分析: 从现象来看 每天凌晨15分,可 ...
- SAP debug的几种方式
1. 直接在程序中设断点 这种方式想必大家都知道了,在se38里面打上breakpoint,程序运行到该处即进入debug模式 2.background Job的debug 进入SM37 ...
- Android获取焦点所在控件
View vFocus=getWindow().getDecorView().findFocus(); if(vFocus instanceof EditText) { ((EditText) vFo ...
- 可展开的列表组件——ExpandableListView深入解析
可展开的列表组件--ExpandableListView深入解析 一.知识点 1.ExpandableListView常用XML属性 2.ExpandableListView继承BaseExpanda ...
- C语言-08-预处理器
C预处理器,C Preprocessor简称CPP.C预处理器不是编译器的一部分,它是一个单独的文本替换工具,指示编译器在实际编译之前需要完成的工作. 常用的预处理器指令 #include 包含头文件 ...
- UNIX/Linux下C语言的学习路线
一.工具篇 “公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具. 1.操作系统 在UNIX或 ...
- Effective Java 42 Use varargs judiciously
Implementation theory The varargs facility works by first creating an array whose size is the number ...