关于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 ...
随机推荐
- 二叉排序树(BST)
二叉排序树(BST) 二叉排序树,又称二叉查找树(BST) 左子树结点值<根节点值<右子树结点值 如果用中序遍历来遍历一棵二叉排序树的话,可以得到一个递增的有序数列 左根右 二叉排序树的查 ...
- c语言实现一些简单图形的打印
1 #define _CRT_SECURE_NO_WARNINGS 1 因为笔者采用的是VS的编译环境所以有了上面的这一句话 我们都知道平面图形是由一条条线段构成,所以我们就先实现线段的打印 1 // ...
- java基础模拟考试三套试卷
卷1: 一.单选题(15道,共30分) //1.下列关于JDK.JRE.JVM关系描述正确的是 (A) A:JDK是开发工具,包含了JRE.JRE是运行环境,包含了JVM.JVM是虚拟机,可以保证跨平 ...
- 《Spring Boot 实战纪实》缺失的逻辑
目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...
- 解决面具magisk刷入模块卡开机问题
手机刷入面具模块出现卡开机第二屏,在reccovery模式下,点击高级(advanced)->文件管理(File Manager)->data->adb->modules删掉对 ...
- GitLab CI构建SpringBoot-2.3应用
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- git使用下
Git 内部工作原理 Git 本质上是一个内容寻址文件系统,最初是一套面向版本控制系统的工具集,而不是一个完整的用户友好的版本控制系统.因此它还包含了一些用于完成底层工作的命令,这些命令被称为&quo ...
- spring mvc与mybatis与maven+mysql框架整合
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- 听说又有兄弟因为用YYYY-MM-dd被锤了...
还记得去年分享过一篇日期格式化使用 YYYY-MM-dd 的潜在问题的文章不? 历史又重演了... 事故现场 我们来写个单元测试,重现一下这个问题. 测试逻辑: 创建两个日期格式化,一个是出问题的YY ...
- react状态管理器之mobx
react有几种状态管理器,今天先来整理一下mobx状态管理器,首先了解一下什么是mobx 1.mobx成员: observable action 可以干嘛: MobX 的理念是通过观察者模式对数据做 ...