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会成这样:
1 <modules>2 <module>demo-project-web</module>3 <module>demo-project-gods-web</module>4 <module>demo-project-customer-web</module>5 <module>demo-project-gods-core</module>6 <module>demo-common</module>7 </modules>
好,那么现在来做工程之间的依赖
首先,demo-project-web作为顶级web项目,所有的子web项目打包后都会整合在此(如果同名文件则被顶级覆盖,如果顶级没有同名文件,但是子web有同名文件,则按照依赖顺序被优先依赖的同名文件覆盖)
pom如下:
1 <?xml version="1.0"?> 2 <project 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 4 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <parent> 8 <groupId>com.demo</groupId> 9 <artifactId>demo-parent</artifactId>10 <version>0.0.1-SNAPSHOT</version>11 </parent>12 13 <groupId>com.demo</groupId>14 <artifactId>demo-project-web</artifactId>15 <version>0.0.1-SNAPSHOT</version>16 <packaging>war</packaging>17 <name>demo-project-web Maven Webapp</name>18 <url>http://maven.apache.org</url>19 20 <dependencies>21 22 <!-- 增加要合并的war包依赖 -->23 <dependency>24 <groupId>com.demo</groupId>25 <artifactId>demo-project-gods-web</artifactId>26 <version>0.0.1-SNAPSHOT</version>27 <type>war</type>28 </dependency>29 <dependency>30 <groupId>com.demo</groupId>31 <artifactId>demo-project-customer-web</artifactId>32 <version>0.0.1-SNAPSHOT</version>33 <type>war</type>34 </dependency>35 36 <dependency>37 <groupId>junit</groupId>38 <artifactId>junit</artifactId>39 <version>3.8.1</version>40 <scope>test</scope>41 </dependency>42 43 </dependencies>44 45 <build>46 47 <finalName>demo-project-web</finalName>48 49 <plugins>50 51 <plugin>52 <groupId>org.apache.maven.plugins</groupId>53 <artifactId>maven-war-plugin</artifactId>54 <version>2.6</version>55 <configuration>56 <!-- 把另外2个web子工程加入进来, 合并war -->57 <overlays>58 <overlay>59 <groupId>com.demo</groupId>60 <artifactId>demo-project-gods-web</artifactId>61 </overlay>62 <overlay>63 <groupId>com.demo</groupId>64 <artifactId>demo-project-customer-web</artifactId>65 </overlay>66 </overlays>67 </configuration>68 </plugin>69 70 </plugins>71 </build>72 73 </project>
修改demo-project-gods-web的pom,添加自身依赖core作为service以及DAO
1 <?xml version="1.0"?> 2 <project 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 4 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 5 <modelVersion>4.0.0</modelVersion> 6 <parent> 7 <groupId>com.demo</groupId> 8 <artifactId>demo-parent</artifactId> 9 <version>0.0.1-SNAPSHOT</version>10 </parent>11 <groupId>com.demo</groupId>12 <artifactId>demo-project-gods-web</artifactId>13 <version>0.0.1-SNAPSHOT</version>14 <packaging>war</packaging>15 <name>demo-project-gods-web Maven Webapp</name>16 <url>http://maven.apache.org</url>17 18 <dependencies>19 20 <!-- 引入依赖, core中包含service以及DAO -->21 <dependency>22 <groupId>com.demo</groupId>23 <artifactId>demo-project-gods-core</artifactId>24 <version>0.0.1-SNAPSHOT</version>25 </dependency>26 27 <dependency>28 <groupId>junit</groupId>29 <artifactId>junit</artifactId>30 <version>3.8.1</version>31 <scope>test</scope>32 </dependency>33 34 </dependencies>35 36 <build>37 <finalName>demo-project-gods-web</finalName>38 </build>39 </project>
在customer中添加工具类依赖
1 <?xml version="1.0"?> 2 <project 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 4 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 5 <modelVersion>4.0.0</modelVersion> 6 <parent> 7 <groupId>com.demo</groupId> 8 <artifactId>demo-parent</artifactId> 9 <version>0.0.1-SNAPSHOT</version>10 </parent>11 <groupId>com.demo</groupId>12 <artifactId>demo-project-customer-web</artifactId>13 <version>0.0.1-SNAPSHOT</version>14 <packaging>war</packaging>15 <name>demo-project-customer-web Maven Webapp</name>16 <url>http://maven.apache.org</url>17 <dependencies>18 19 <!-- 添加common工具类依赖 -->20 <dependency>21 <groupId>com.demo</groupId>22 <artifactId>demo-common</artifactId>23 <version>0.0.1-SNAPSHOT</version>24 </dependency>25 26 <dependency>27 <groupId>junit</groupId>28 <artifactId>junit</artifactId>29 <version>3.8.1</version>30 <scope>test</scope>31 </dependency>32 33 </dependencies>34 <build>35 <finalName>demo-project-customer-web</finalName>36 </build>37 </project>
============进入代码阶段============
parent是父工程,不需要编写代码
demo-common:
1 package org.demo.common; 2 3 import java.util.Date; 4 5 public class DateUtil { 6 7 public static void showTime(String name) { 8 System.out.println("Run in demo-common - Hello ~ " + name + ", it is " + new Date().toString()); 9 }10 11 }
demo-project-customer-web:
1 package com.demo.project.customer.web; 2 3 import org.demo.common.DateUtil; 4 5 public class AbcService { 6 7 public static void getDateService(String name) { 8 DateUtil.showTime(name); 9 System.out.println("Run in demo-project-customer-web...");10 }11 12 }
customer.jsp
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <%@page import="com.demo.project.customer.web.AbcService"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 6 <html xmlns="http://www.w3.org/1999/xhtml" 7 xmlns:f="http://java.sun.com/jsf/core" 8 xmlns:h="http://java.sun.com/jsf/html"> 9 <head>10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />11 <title>Insert title here</title>12 </head>13 <body>14 <%15 System.out.print("hello demo-project-customer-web customer.jsp");16 AbcService.getDateService("abc");17 %>18 19 </body>20 </html>
demo-project-gods-core:
1 package org.demo.project.gods.core; 2 3 4 public class Gods { 5 6 public static void getDateService(String name) { 7 System.out.println("Run in demo-project-gods-core..."); 8 } 9 10 }
demo-project-gods-web
index.jsp
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <%@page import="org.demo.project.gods.core.Gods"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 6 <html xmlns="http://www.w3.org/1999/xhtml" 7 xmlns:f="http://java.sun.com/jsf/core" 8 xmlns:h="http://java.sun.com/jsf/html"> 9 <head>10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />11 <title>Insert title here</title>12 </head>13 <body>14 15 <%16 System.out.print("hello demo-project-gods-web gods.jsp");17 Gods.getDateService("nathan");18 19 %>20 </body>21 </html>
run - mvn install:
运行成功,进入相应的页面则成功