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 多工程搭建演示的更多相关文章

  1. ecplise maven springmvc工程搭建

    转载自:https://www.cnblogs.com/crazybirds/p/4643497.html 内网上网代理配置: 第一步:新建maven项目,选择Maven Project,如图1.   ...

  2. 001淘淘商城项目:项目的Maven工程搭建

    开始一个新的项目,特此记录,资料全部来源于传智播客,感谢. 我们要做一个类似电商的项目.用maven做管理. maven里面主要分为三种工程: 1:pom工程:用在父级工程,聚合工程中 2:war工程 ...

  3. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  4. 单工程搭建springmvc+spring+mybatis(maven,idea)

    单工程搭建springmvc+spring+mybatis(maven,idea) 1.pom.xml <properties> <project.build.sourceEncod ...

  5. 【曹工杂谈】Maven源码调试工程搭建

    Maven源码调试工程搭建 思路 我们前面的文章<[曹工杂谈]Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗>分析了Maven大体的执行阶段,主要包括三个阶段: 启动类阶段,负责 ...

  6. maven工程运行演示

    通过maven提供的命令来运行maven工程,体会maven构建工程的优点. (1)运行web工程    进入maven工程目录(当前目录有pom.xml),运行tomcat:run命令 可能出现的问 ...

  7. (转)淘淘商城系列——使用maven构建工程

    http://blog.csdn.net/yerenyuan_pku/article/details/72669269 开发工具和环境 这里,我统一规范一下淘淘商城的开发工具和环境,如下: Eclip ...

  8. Maven+STS工程中Maven Dependencies 文件夹丢失问题

    在我们使用Maven+sts工程中偶尔会出现这种情况: Maven Dependencies文件夹在新打开的工程中丢失,造成 web project 自动编译出错,缺少必要的库文件: 如下图所示的情况 ...

  9. 某马-某淘商城的day01--->分析,工程搭建,tomcat插件启动工程,svn,反思

    -1:为什么还要写某马的某淘商城呢? 答:万物更新,季节交替.新人总把旧人换.所以呢,前人写了N多遍的东西,我们依旧在学,所以下决心写某马的某淘商城.(也因为在学校还没找工作,所以找个相对长期的事情做 ...

随机推荐

  1. B/S和C/S的区别(转)

    一.什么是CS和BS结构? 1.C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.Informix ...

  2. Gulp-前端进阶A-3---如何不刷新监控文件变化?

    npm install --save-dev gulp-connect npm install --save-dev gulp-livereload npm其他,前面已有 var gulp = req ...

  3. [.NET] 使用C#开发SQL Function来提供服务 - 简讯发送

    [.NET] 使用C#开发SQL Function来提供服务 - 简讯发送 范例下载 范例程序代码:点此下载 问题情景 在「使用C#开发SQL Function来提供数据 - 天气预报」这篇文章中,介 ...

  4. 简单理解JavaScript闭包

    很多关于JS的书籍例如<JavaScript权威指南>或者<高程>都把闭包解释的晦涩难懂,萌新们是怎么也看不懂啊!不过别怕,今天我就用很简单的方式给大家讲解下到底什么是闭包.这 ...

  5. IOS6学习笔记(四)

    1.GCD设置一个timer计时器 - (void)awakeFromNib { __weak id weakSelf = self; double delayInSeconds = 0.25; _t ...

  6. Objective-C

    1.OC基础 第一个OC的类 Objective-C: 字符串NSString与NSMutableString iOS开发的入门总结的第一篇 iOS开发的入门总结的第二篇

  7. IOS开发中如何实现自动检测更新APP

    自动检测更新实现逻辑: 先上github地址:https://github.com/wolfhous/HSUpdateApp 1,获取当前项目APP版本号 2,拿到AppStore项目版本号 3,对比 ...

  8. 安卓第十三天笔记-服务(Service)

    安卓第十三天笔记-服务(Service) Servcie服务 1.服务概念 服务 windows 服务没有界面,一直运行在后台, 运行在独立的一个进程里面 android 服务没有界面,一直运行在后台 ...

  9. 安卓第十一天笔记-Intent与inter-filter配置

    安卓第十一天笔记-Intent与inter-filter配置 Intent与inter-filter配置 1.Intent对象简述 Android应用中有包含三种重要组件:Activity,Servi ...

  10. iOS 利用长按手势移动 Table View Cells

    本文译自:Cookbook: Moving Table View Cells with a Long Press Gesture 目录: 你需要什么? 如何做? 如何将其利用至UICollection ...