模块的聚合
聚合的好处:
统一对各个模块的编译,测试,打包,安装,发布操作,不用每个模块都单独编译,测试等
集中管理,批量执行Maven的命令(注:命令即插件,执行一个命令等同于运行一个插件!)
用法:
新建一个Maven项目,修改POM,将package属性改为pom
使用Module标签引入其它模块
由于该聚合模块是新建的Maven项目,在指定路径时需回退到上一级目录,才能定位到其它模块。
<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>com.gc.user</groupId> <artifactId>user-aggregation</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 此处,类型为pom --> <packaging>pom</packaging> <!-- 将其它模块放到一起,集中执行命令 --> <modules> <module>../user-core</module> <module>../user-dao</module> </modules> </project>
====================================================================
模块的继承
引入继承带来的好处:
将各个模块中相同的配置定义到一个文件中,由其它模块来继承
提高pom文件配置的重用性,而且可以单点维护---单一职责原则!
用法:
新建一个Maven项目,将其artifactId设置为user-parent
修改package属性为pom
parent模块
<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>com.gc.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>user-parent</name> <url>http://maven.apache.org</url> <!-- 常量的定义,子模块中通过${}就能使用此处定义的常量:单点维护 --> <properties> <project.version>0.0.1-SNAPSHOT</project.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <my.jar.source>d:/</my.jar.source> <junit.version>4.10</junit.version> </properties> <!-- 如果不通过 dependencyManagement管理依赖,虽然子模块能够继承这些依赖, 但是会继承所有parent中的依赖!应该根据各个子模块的需求,灵活继承依赖, 所以使用dependencyManagement来管理,这样子模块声明了那些依赖,就继承哪些依赖 子类没有声明的依赖,就不会继承下去。 --> <dependencyManagement> <dependencies> <!-- 子模块的依赖 --> <dependency> <groupId>com.gc.user</groupId> <artifactId>user-core</artifactId> <version>${project.version}</version> </dependency> <!-- 子模块的依赖 --> <dependency> <groupId>com.gc.user</groupId> <artifactId>user-dao</artifactId> <version>${project.version}</version> </dependency> <!-- 其它依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.6.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>servlet-api</artifactId> <version>2.5-6.0.0</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> </project>
子模块user-core模块继承parent模块
<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>com.gc.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>user-core</artifactId> <!-- groupId和version将从parent继承,无需定义 --> <packaging>jar</packaging> <!-- properties将从parent继承,无需定义 --> <name>user-core</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <!-- version无需定义,会从parent继承下来 --> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>servlet-api</artifactId> <scope>provided</scope> </dependency> </dependencies> </project>
子模块user-dao模块继承parent模块
<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>com.gc.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>user-dao</artifactId> <packaging>jar</packaging> <name>user-dao</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- 引入user-core,将会发生传递性依赖:user-core中的依赖是否会导入到本模块中,还要根据scope决定! --> <dependency> <groupId>com.gc.user</groupId> <artifactId>user-core</artifactId> <exclusions> <!-- 排除user-core模块中关于log4j的依赖 --> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
====================================================================
将聚合与继承集中到parent模块的POM中
user-parent模块,既提供聚合又提供继承
<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>com.gc.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <!-- 将其它模块放到一起,集中执行命令 --> <modules> <module>../user-core</module> <module>../user-dao</module> </modules> <name>user-parent</name> <url>http://maven.apache.org</url> <!-- 常量的定义,子模块中通过${}就能使用此处定义的常量:单点维护 --> <properties> <project.version>0.0.1-SNAPSHOT</project.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <my.jar.source>d:/</my.jar.source> <junit.version>4.10</junit.version> </properties> <!-- 如果不通过 dependencyManagement管理依赖,虽然子模块能够继承这些依赖, 但是会继承所有parent中的依赖!应该根据各个子模块的需求,灵活继承依赖, 所以使用dependencyManagement来管理,这样子模块声明了那些依赖,就继承哪些依赖 子类没有声明的依赖,就不会继承下去。 --> <dependencyManagement> <dependencies> <!-- 子模块的依赖 --> <dependency> <groupId>com.gc.user</groupId> <artifactId>user-core</artifactId> <version>${project.version}</version> </dependency> <!-- 子模块的依赖 --> <dependency> <groupId>com.gc.user</groupId> <artifactId>user-dao</artifactId> <version>${project.version}</version> </dependency> <!-- 其它依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.6.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>servlet-api</artifactId> <version>2.5-6.0.0</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> </project>
相关推荐
Maven多模块项目是指由一个父项目(或称为聚合项目)和若干个子项目组成的项目结构。这种结构便于代码组织,提高代码复用性,并能有效管理依赖关系。每个子项目都是独立的Maven项目,可以有自己的pom.xml配置文件,...
### Maven安装配置教程及仓库、POM坐标系、Maven工程、继承与聚合 #### Maven安装与配置 在开始之前,我们首先需要了解Maven是什么。Maven是Apache的一个项目,是一个项目管理和综合工具,主要用来帮助Java项目...
七、Maven工程继承和聚合关系 1. Maven工程继承关系 一个父pom可以定义共享的依赖、插件、属性等,子项目通过元素继承这些配置。 2. Maven工程聚合关系 通过元素,一个父项目可以聚合多个子项目,方便进行整体构建...
聚合和继承是Maven中的两个重要概念,它们之间有着密切的关系: - **聚合**:用于组织多个子项目,实现集中管理和构建。 - **继承**:用于共享配置信息,减少重复配置。 #### 六、私服 Maven私服是一种内部使用的...
在Idea中,还可以利用Maven的“聚合”(Aggregation)和“继承”(Inheritance)特性来简化大型项目的配置。聚合允许你将多个Maven项目作为一个单元进行管理,而继承则允许子项目共享父项目的一些配置,避免重复代码...
Maven3教程 一、前言 Maven是一个强大的Java项目管理...通过本教程,初学者可以掌握Maven的基础知识,包括安装、配置、项目创建、依赖管理、仓库使用以及聚合与继承的概念,为进一步深入学习和使用Maven打下坚实基础。
选择菜单“File” > “New” > “Maven Project”,然后按照向导步骤操作,选择合适的archetype并输入项目信息。 ### 4. Maven基本使用 4. **依赖管理** 在`pom.xml`文件中声明项目依赖,Maven会自动下载并管理...
**3.4 聚合与继承** 聚合允许在一个顶级项目中管理多个子模块,从而简化了多模块项目的构建。继承则允许子项目继承父项目的配置,减少了重复配置的工作量。 #### 四、Maven的高级特性 **4.1 使用Nexus建立私服** ...
1. **继承(Inheritance)**:Maven的继承机制类似于Java的类继承,父模块(Parent Module)可以定义一些共有的配置,如版本号、依赖管理等,子模块可以直接继承这些配置,避免重复定义,提高代码的可维护性。...
5. **项目聚合与继承**:多个Maven项目可以通过聚合(aggregation)和继承(inheritance)关系进行组织,简化大型项目管理。 【Maven的项目结构】 Maven遵循一套标准的项目目录结构,以方便管理和构建: - `src/...
- 集成Maven的聚合和继承特性。 ** 总结 ** Maven Eclipse插件使得开发者能够在Eclipse IDE中无缝地使用Maven,提升了开发效率。通过插件,开发者可以方便地管理项目依赖,执行构建任务,以及进行项目配置,无需...
5. **聚合与继承特性:** Maven支持项目结构的分层管理,通过聚合和继承机制,可以有效地组织和管理多个子模块。 6. **生命周期与插件管理:** Maven的核心是一个容器,用于管理项目的构建生命周期和插件。通过插件...
4. **聚合与继承**: 多模块项目中,可以使用`<modules>`标签聚合多个子项目,通过`<parent>`标签实现父子POM的继承,共享配置。 通过以上步骤,你已经在Eclipse中成功配置了Maven。现在,你可以享受Maven带来的自动...
Maven支持项目之间的聚合和继承,使得多个模块可以被一起构建和部署,同时也可以重用基础项目的配置。 #### 四、高级主题 **4.1 使用Nexus建立私服** Nexus是一个企业级的Maven仓库管理器,可以帮助企业搭建私有...
- 聚合和继承是相互独立的概念,可以单独使用也可以结合使用。 - 聚合主要用于管理项目结构,而继承用于共享配置。 4. **Maven可继承的POM元素** - `<groupId>`, `<artifactId>`, `<version>`等基本项目信息不可...
4. 创建聚合工程 c:在 c 模块下新建一个 Maven 工程模块 c1,继承 c 模块配置 c1 工程路径,finish 完成 c1 模块创建。 5. 创建 c2 模块:依赖 c1 模块,c 工程模块依赖 b 工程模块。 项目结构 这种项目结构主要...
7. **聚合与模块**:Maven支持项目聚合,可以将多个子项目组合成一个父项目,便于管理和构建。 在实际工作中,掌握这些Java和Maven的知识点能够帮助开发者高效地编写、构建和维护Java应用程序,同时也有利于团队...
现在,我们可以创建一个Elasticsearch的Repository接口,它继承自`ElasticsearchRepository`。这个接口提供了基本的CRUD操作: ```java public interface MyDocumentRepository extends ElasticsearchRepository, ...
这通常通过在`pom.xml`文件中引入`spring-boot-starter-data-elasticsearch`和`elasticsearch-rest-high-level-client`的Maven依赖来完成。这将确保我们的应用程序能够与Elasticsearch服务器进行通信。 接着,我们...