19) maven 项目结构:聚集

Project Aggregation [,æɡr?‘ɡe???n]

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html

https://maven.apache.org/guides/mini/guide-multiple-modules.html

模块式开发(将所有模块聚合在一个父pom)

使用一个父pom,管理各个模块,控制模块间依赖关系和构建顺序

开始一个简单的demo来理解这个结构

1.创建一个父pom(Maven Project)

<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>
  <groupId>cn.zno</groupId>
  <artifactId>app-pom</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>
</project>

2.创建一个jar模块(Maven Module)

右键 app-pom

new Maven Module

<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>
  <parent>
    <groupId>cn.zno</groupId>
    <artifactId>app-pom</artifactId>
    <version>1.0</version>
  </parent>
  <artifactId>app-jar</artifactId>
</project>

3.创建一个war模块

<?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>cn.zno</groupId>
    <artifactId>app-pom</artifactId>
    <version>1.0</version>
  </parent>
  <artifactId>app-war</artifactId>
  <packaging>war</packaging>
  <name>app-war Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>app-war</finalName>
  </build>
</project>

现在父pom自动修改为:

<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>
  <groupId>cn.zno</groupId>
  <artifactId>app-pom</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>
  <modules>
      <module>app-jar</module>
      <module>app-war</module>
  </modules>
</project>

现在install app-pom

右键app-pom ,Run As ,Maven install

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] app-pom
[INFO] app-jar
[INFO] app-war Maven Webapp
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building app-pom 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ app-pom ---
[INFO] Installing F:\e\workspacetest\app-pom\pom.xml to C:\Users\wl\.m2\repository\cn\zno\app-pom\1.0\app-pom-1.0.pom
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building app-jar 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ app-jar ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ app-jar ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ app-jar ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ app-jar ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ app-jar ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ app-jar ---
[INFO] Building jar: F:\e\workspacetest\app-pom\app-jar\target\app-jar-1.0.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ app-jar ---
[INFO] Installing F:\e\workspacetest\app-pom\app-jar\target\app-jar-1.0.jar to C:\Users\wl\.m2\repository\cn\zno\app-jar\1.0\app-jar-1.0.jar
[INFO] Installing F:\e\workspacetest\app-pom\app-jar\pom.xml to C:\Users\wl\.m2\repository\cn\zno\app-jar\1.0\app-jar-1.0.pom
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building app-war Maven Webapp 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ app-war ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ app-war ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ app-war ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory F:\e\workspacetest\app-pom\app-war\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ app-war ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ app-war ---
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ app-war ---
[INFO] Packaging webapp
[INFO] Assembling webapp [app-war] in [F:\e\workspacetest\app-pom\app-war\target\app-war]
[INFO] Processing war project
[INFO] Copying webapp resources [F:\e\workspacetest\app-pom\app-war\src\main\webapp]
[INFO] Webapp assembled in [36 msecs]
[INFO] Building war: F:\e\workspacetest\app-pom\app-war\target\app-war.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ app-war ---
[INFO] Installing F:\e\workspacetest\app-pom\app-war\target\app-war.war to C:\Users\wl\.m2\repository\cn\zno\app-war\1.0\app-war-1.0.war
[INFO] Installing F:\e\workspacetest\app-pom\app-war\pom.xml to C:\Users\wl\.m2\repository\cn\zno\app-war\1.0\app-war-1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] app-pom ............................................ SUCCESS [  0.674 s]
[INFO] app-jar ............................................ SUCCESS [  2.903 s]
[INFO] app-war Maven Webapp ............................... SUCCESS [  0.759 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.483 s
[INFO] Finished at: 2016-09-07T15:11:51+08:00
[INFO] Final Memory: 13M/111M
[INFO] ------------------------------------------------------------------------

做了这几件事:

install 了一个pom文件

install 了一个 jar 文件

install 了一个 war 文件

构建顺序引用官网的话:

The following relationships are honoured when sorting projects:

  • a project dependency on another module in the build
  • a plugin declaration where the plugin is another modules in the build
  • a plugin dependency on another module in the build
  • a build extension declaration on another module in the build
  • the order declared in the <modules> element (if no other rule applies)

因为app-war 和 app-jar 没有依赖关系,所以构建顺序是用的最后一个规则(modules 声明顺序)

为何模块化开发

  • 分工明确代码复用
  • SOA模块便于分布式
  • 保护源码权限控制
  • 局部构建节省时间

1.开发过程中可能遇到多个项目,里面的dao ,servie, util 重复使用,形成代码到处复制粘贴。等到想修改某处逻辑时傻眼了,因为要改N处。无谓的加大了开发成本和维护成本。

2.并发访问量提升之后考虑的SOA,如果最初设计时没有服务模块化,改动成本巨大。

3.版本控制软件svn 、git,如果代码全在一处,虽然只分配一个小任务只涉及到小部分代码,但全部的代码都要被下载下来。

4. 只修改了一个小功能没想到需要整体构建一下子,慢慢慢。

时间: 2024-08-29 17:18:16

19) maven 项目结构:聚集的相关文章

Maven01 环境准备、maven项目结构、编译/测试/打包/清除、安装、

0 前提准备 0.1 安装java开发环境 0.2 安装maven工具 1 maven项目基本结构 如图所示,整个maven项目有业务文件.测试文件.POM依赖管理文件:其实还有一个资源文件resources: 代码文件和测试文件都是放在src文件中,src文件成为源文件:业务文件和测试文件处于src中同一级目录: 资源文件管理文件分为测试资源文件和业务资源文件,分别位于main目录和test目录,此处没有进行创建. 2 maven项目搭建 2.1 创建maven项目结构 安装maven规范的目

maven(三):maven项目结构及其运行机制

在上一篇中讲了如何创建maven项目,现在回到那个项目 项目结构 src/main/java:java代码目录 src/main/resources:资源目录,比如spring.xml文件,properties参数等 java和resources目录的内容都会编译到classpath下,也就是和传统项目的src目录一样的作用,这里分成多个目录是为了开发时方便管理资源 libraries:默认只有jre和maven,没有引入tomcat库,我们的项目应该可以在所有的web服务器中运行,而不仅仅是t

maven项目结构

maven java项目结构 pom.xml 核心配置,项目根下 src/main/java java源码目录 src/main/resources java配置文件目录(maven项目中的配置文件以后都放到这里) src/test/java 测试源码目录 src/test/resources 测试配置目录 target 输出目录(字节码文件和jar包)//编译自动生成 maven web项目结构 pom.xml 核心配置 src/main/java java源码 src/main/resour

20) maven 项目结构:all in one

这是最常见的项目结构 垂直结构 也是初学者常用的 也是小项目常用的 优点 全部代码在一个项目里,一目了然. 结构简单易于理解 一开始时小巧 缺点 随之而来的缺点也十分明显 前端项目,后端项目,接口项目等 多项目之间没有共用的代码,代码将被各种复制粘贴,越来越难维护 难于大型化分布式 高耦合

maven项目结构和创建maven项目的命令

创建Maven的Web项目:mvn archetype:generate -DgroupId=packageName -DartifactId=webappName -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeGroupId=org.apache.maven.archetypes -DinteractiveMode=false创建Maven的普通java项目:mvn archetype:generate -DgroupId=pa

【maven项目结构】module 生成独立的jar

生成jar 生成jar的过程会出现以下问题: clean完了之后就会出现以下问题: "D:\Program Files\Java\JDK\jdk1.8.0_31\bin\java" "-Dmaven.home=D:\Program Files (x86)\JetBrains\IntelliJ IDEA 14.1.2\plugins\maven\lib\maven3" "-Dclassworlds.conf=D:\Program Files (x86)\Je

命令方式 搭建 (简易)Maven项目

原料:1.配好的Maven环境变量    2.c m d命令 win  + r  输入 cmd 切换到此项目所要存在的位置 使用命令创建文件夹 切换 到 maven_demo中  输入 cd maven_demo 使用命令创建maven项目结构(类似下面这种结构,规范点的.) md --> 创建文件夹 src \ main \ java \ com \ oukele  -->   创建src文件夹,在src目录下创建main文件夹,在main目录下创建java文件夹... 在 oukele目录

如何在eclipse中开发多个聚合关系的maven项目并用git管理

最近在开发项目时用到maven,多个maven项目之间是有一定联系的,所以分开创建,再用maven聚合管理. 项目使用git来管理代码,因为上传代码时设置.gitignore文件中不上传.setting等文件,所以在git中下载下来之后的maven项目不是一个elipse项目文件,这样如果在github中拉下代码之后,再导入时不是很方便,所以这里使用maven的插件,把各个项目变成Eclipse项目. 项目的结构如下: 其中encryption是多个maven项目中的其中一个,这些项目都依赖Ut

在MyEclipse中如何创建Maven项目

1. 创建一个Maven4MyEclipse项目 (1)选择File> New,然后选择您要创建项目的类型.您可以添加Maven来支持Web.EJB.EAR和常规的Java项目. (2)在新建的项目窗口上填写字段,选择Add Maven Support复选框,然后单击下一步直到抵达Artifact页面. 添加Maven支持 (3)输入Group ID和Artifact ID.这符合典型包和项目的命名规则. 该项目结构默认为一个标准的MyEclipse项目结构.您可以选择Maven项目结构代替.