关于maven多module的依赖问题
之前的项目因为历史的原因,都是一个project里只包含了一个module,今年进入了新的项目组,出现了多个module,最近刚好也是在学《maven实战》因此想要将这个东西记录下来
工程情况如下图

示例的工程名为inaction
其中位于根目录的pom.xml内的代码如下
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>com.example</groupId>
8 <artifactId>inaction</artifactId>
9 <packaging>pom</packaging>
10 <version>1.0-SNAPSHOT</version>
11
12 <modules>
13 <module>inactionuser</module>
14 <module>inactioncore</module>
15 <module>inactionparent</module>
16 </modules>
17
18 </project>
因为是多module,所以必然是有自己编写的类或接口,是可以放在公共的module里的这里我把它命名为 inaction-core
然后有一个inaction-user表示用户模块的
一般的,如果我们需要将本地一些代码抽取到公共模块,那么还需要一个module来进行管理,在我的项目中,这个为 inaction-parent
记得要设置<realtivePath>../pom.xml</realtivePath>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
6 <modelVersion>4.0.0</modelVersion>
7
8 <groupId>com.example</groupId>
9 <artifactId>inaction-parent</artifactId>
10 <version>1.0-SNAPSHOT</version>
11
12 <!-- dependmanager不会向子类真的导入依赖,只是起到一个约束的作用 -->
13 <dependencyManagement>
14 <dependencies>
15 <!-- 这里声明本地公共的module -->
16 <dependency>
17 <groupId>com.example</groupId>
18 <artifactId>inaction-core</artifactId>
19 <version>1.0-SNAPSHOT</version>
20 </dependency>
21 </dependencies>
22 </dependencyManagement>
23
24 </project>
再看core和user 两个module
(ps 在paren头结点下,记得补充 <relativePath>../inactionparent/pom.xml</relativePath>)
<?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">
<parent>
<groupId>com.example</groupId>
<artifactId>inaction-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>inaction-user</artifactId>
<packaging>jar</packaging> <dependencies>
<!--注意到这里我们已经不需要声明版本了,因为在parent那边已经对版本进行了管理-->
<dependency>
<groupId>com.example</groupId>
<artifactId>inaction-core</artifactId>
</dependency>
</dependencies>
</project>
core模块就很简单,只需要声明其父module即可
<?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">
<parent>
<groupId>com.example</groupId>
<artifactId>inaction-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <artifactId>inaction-core</artifactId> </project>
然后,在user模块中去引用core的类就不会有编译问题了
如果多module没有引用本地的module,那么可以不需要parent,直接声明到根目录下
注意,你的root,parent和公共的module,一定不要有 maven plugin,尤其是公共的module,会导致在 mvn clean install 的时候,报找不到类的错误
关于maven多module的依赖问题的更多相关文章
- Maven核心概念之依赖,聚合与继承
一.依赖 我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入. <dependency> <groupId>juni ...
- 使用Java web工程建立Maven Web Module工程
1. 前言 之前有一篇关于搭建S2SH的文章中提到建立Maven Web Module工程,有人反馈说这个方面不会.那还是唠叨一下,写篇文章说明一下吧. 建立Maven Web Module的方式有多 ...
- maven 打包含有第三方依赖的 jar 包
maven 打包含有第三方依赖的 jar 包:mvn assembly:assembly
- maven的中传递依赖,maven的依赖管理(转)
在maven的pom文件中 <dependencies> <dependency> <groupId>junit</groupId> <artif ...
- Maven之——坐标和依赖(上)
Maven之--坐标和依赖(上) 1. Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到详细的构件.Maven的坐标元素包含groupId.artifactId.versi ...
- maven添加oracle jdbc依赖
maven添加oracle jdbc依赖 由于Oracle授权问题,Maven不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到 ...
- 【Maven】---坐标与依赖
Maven坐标与依赖 最近想深度学习下maven,找到一本书叫<Maven实战>,这本书讲的确实很好,唯一遗憾的是当时maven教学版本是3.0.0的,而目前已经到了3.5.4了,版本存在 ...
- 用Maven快速生成带有依赖的可执行jar包
一.背景 最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分享如何通过m ...
- Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包
一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...
随机推荐
- 箭头函数this指向问题
this指向本质 箭头函数this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this.正是因为它没有this ...
- C++ 消失的析构函数 —— virtual 实现的动态析构
在C++类的结构中可以使用类方法创建内存,使用类的析构函数去施放内存,但有这么一种情况会导致:即使在析构函数中释放了内存,但由于析构函数没有被调用而导致内存泄漏,如下代码. 1 #include &l ...
- js v-if 判断多个属性 in
js v-if 判断 <div v-if="suborder.approve_user==user_id || suborder.approve_userrole_id in rol ...
- Java IO流 FileOutputStream、FileInputStream的用法
FileOutputStream.FileInputStream的使用 FileOutputStream是OutputStream的继承类,它的主要功能就是向磁盘上写文件.FileOutputStre ...
- vue 分支结构
分支循环结构 分支循环结构指令 v-if v-else v-else-if v-show v-if 指令 可以直接在元素中添加指令,添加判断的值 最后运行可以得到结果是: v-show v-show ...
- 2020-2021-1 20209307《Linux内核原理与分析》第五周作业
一.理论知识 系统调用:操作系统为用户态进程与硬件设备进行交互提供的一组接口. 系统调用的三层皮:API(应用程序接口),中断向量system_call,中断服务程序sys_xyz 宏观上Linux操 ...
- log4j配置获取系统属性及默认值
一.使用场景 1.因某些原因,我们可能将log4j中的配置变量化,进行动态获取 2.动态获取内容不存在时,我们希望能够赋上通用的值 二.语法 单变量: ${前缀:变量:-默认值} 如: ${sys:i ...
- Peomise
什么是promise 简单回答: 一种异步的解决方案 回顾一下什么是异步 事件 / setTimeout 异步执行的时机 同步->异步微任务->GUI渲染->异步宏任务 #为 ...
- Application Data in Docker 笔记
Application Data in Docker By default all files created inside a container are stored on a writable ...
- Unity 2017 Scene界面与Game界面显示不同/过于灰暗的解决办法
场景界面的显示过于灰暗,严重影响工作心情. 切换到游戏界面时的颜色. 只要将场景中全部摄像机的[Allow HDR]取消勾选即可.