Maven学习记录(四)--多模块开发配置

多模块的好处就是协同开发,对于大的项目这样分工可以提高效率,同时减轻代码耦合,看起来也一目了然,maven多模块还解决了不同人开发使用的架包版本冲突等问题

一.创建项目

1.创建父级容器

不要使用模板,直接创建,创建后就可以直接把src目录删除,这个容器是用来承载其他子项目的

2.创建子项目

直接对着父项目右键,然后创建module,选择你需要用到的模板

3.创建后IDEA生成的配置

首先是目录结构,

对应的maven结构,root代表父项目

父项目的pom.xml,IDEA很智能的把要配置的都配置完整了

<?xml version="1.0" encoding="UTF-8"?>
<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.mrdear</groupId>
    <artifactId>module_main</artifactId>
    <!--pom类型表示当前项目是一个父项目-->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <!--modules用来定义当前模块的项目列表-->
    <modules>
        <module>maven-parent</module>
        <module>maven-entity</module>
        <module>maven-core</module>
        <module>maven-web</module>
    </modules>

</project>

子项目的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!--表示当前继承与这个maven坐标对应的项目-->
    <parent>
        <artifactId>module_main</artifactId>
        <groupId>com.mrdear</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
<!--打包类型没配置,默认为jar-->
    <artifactId>maven-entity</artifactId>

</project>

到此整个多模块就算创建完毕了,不得不说用IDEA实在是太方便了,总结一下

1. 创建父项目

2. 创建子项目

3. 父项目设置打包类型packaging为pom,表示为父项目,并且使用modules标签管理子项目

4. 子项目使用parent标签来继承父项目


二.使用dependencyManagement管理依赖

在 pom 中指明 dependencymanagement 元素的方式 maven 结合项目继承来管理依赖。在多模块应用中,可能多个子项目会有共同的依赖。此时为了正确运行,必须让所有的子项目使用依赖项的同一版本。必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的成果。因此,应在顶层的 pom 中定义共同的依赖关系。

与dependencys不同的是在项目中虽然子项目继承了这个pom文件,但是只有显示的声明引入,才会真正的引入,并不是像dependencys这样全部引入继承的包.

换句话说dependencyManagement只会影响现有依赖的配置,但不会引入依赖

例如在主项目中配置:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

子项目中引入:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

这样就保证了所有的子项目使用的包都是同一版本的


三.使用pluginManagement管理插件

pluginManagement和dependencyManagement不同,配置完成后,子项目直接继承使用,可以通过effectivePom查看,所以一般配置公共的插件,如编译版本,编码之类的.

<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

直接在父项目中如上配置,子项目就可以直接使用这个插件,无需配置了.

四.项目间互相依赖

直接使用dependency标签配置即可,把子项目就当成jar包用就好了,如下面就是增加entity实体的依赖,这样做的好处就是协同开发,不同的人写不同的模块

  <!--配置子项目依赖-->
        <dependency>
            <groupId>com.mrdear</groupId>
            <artifactId>maven-entity</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
时间: 2024-10-23 19:28:30

Maven学习记录(四)--多模块开发配置的相关文章

Maven学习记录

Maven学习记录文档 一.下载安装Maven说明: 1.Jdk环境准备 由于Maven依赖Java运行环境,因此使用Maven之前需要配置Java的运行环境.下载并安装JDK,配置JDK的环境变量JAVA_HOME,否则maven将无法使用 2.下载maven 首先下载maven的bin,在apache官方网站可以下载. http://maven.apache.org/download.cgi 3.设置maven环境变量 1)在PATH里加入maven的bin的路径 下载下来之后,解压,找个路

Maven学习记录(1)

一.Maven的作用 1.项目模块管理 一个项目可能是由多个模块构成,使maven来管理多个模块. 2.依赖关系管理 当不使用maven时,每次构建新的项目必须将许多jar包添加到classpath中,如果漏了某个jar包都会报错.而使用maven之后可以在一个pom.xml文件中管理jar包.修改和替换都很方便. 3.项目构建(摘自Maven生命周期详解) Maven有三个生命周期,每个生命周期由一组阶段组成.生命周期之间相互独立,可以单独调用.而生命周期内的阶段则是相互依赖的: Clean

高可用mongodb集群的学习记录(四mongodb分片集群搭建)

无论oracle还是mysql数据库都有分区的概念,即同一张表物理上不在同一台机器上,有效缓解了表都集中存在一台机器的压力.当然,mongodb也有类似的机制,即是分片.具体理论知识大家可以参考网上文档,我这里只记录下具体操作步骤 参考网络上一个图.我选用的是2个副本集+1个仲裁.实际上我这里分片集群需要3个mongos,3个config server,数据分片3个shard server,对应着还有3个副本,3个仲裁节点,总共需要15个实例.因为我资源确实紧张,又不想影响实验效果.冥思苦想了一

openstack学习(四):nova配置以及使用

记录,方便查阅. 配置 controller节点的配置 数据库建立: mysql -p123456 -e "CREATE DATABASE nova;GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'192.168.23.11' IDENTIFIED BY 'nova';GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';" 创建keystone中用户.服务等: keyst

Maven学习总结(四)——Maven核心概念

一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 version:项目的当前版本 packaging:项目的打包方式,最为常见的jar和war两种 样例: 1.3.Maven为什么使用坐标? Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范. 拥有了统一规范,就可以把查找工作交给机器. 二.依赖管理 2.1.依赖配置 依赖配置主要

Maven学习总结(四)——Maven核心概念--转载

一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 version:项目的当前版本 packaging:项目的打包方式,最为常见的jar和war两种 样例: 1.3.Maven为什么使用坐标? Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范. 拥有了统一规范,就可以把查找工作交给机器. 二.依赖管理 2.1.依赖配置 依赖配置主要

Maven学习(四)-- Maven的核心概念

摘自:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 version:项目的当前版本 packaging:项目的打包方式,最为常见的jar和war两种 样例: 1.3.Maven为什么使用坐标? Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的

Mybatis学习记录(四)--高级查询和缓存

这些都是连贯的学习笔记,所以有的地方因为之前都说过,所以也就没怎么写详细了,看不太明白的可以看看之前的笔记. 一.高级查询 高级查询主要是一对一查询,一对多查询,多对多查询 1.一对一查询 有用户和订单两个表,用户对订单是1对1查询.也就是订单中有一个外键是指向用户的. 先创建实体类: User.java public class User { private int id; private String username; private String password; private St

Maven学习记录(二)--Maven核心概念

转载自 http://www.cnblogs.com/xdp-gacl/p/4051819.html 博主写的很好,所以直接转载过来了 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 version:项目的当前版本 packaging:项目的打包方式,最为常见的jar和war两种 样例: 1.3.Maven为什么使用坐标? Maven世界拥有大量构建,