maven多模块项目管理(帮助你解决许多的依赖版本问题)
文章目录
- 一、第一种创建方式
- 1、创建空项目,然后起个名字
- 2、然后在创建好的空项目中,创建父工程
- 3、名词解析
- 4、父工程创建好后,必须遵循两个原则
- 5、创建子工程
- 6、依赖版本控制(重要)
- 二、第二种创建方式(推荐)
- 三、打包
一、第一种创建方式
博客:https://blog.csdn.net/qq_40925189/article/details/103842208
1、创建空项目,然后起个名字
2、然后在创建好的空项目中,创建父工程
3、名词解析
名词解释:
GroupID 是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
ArtifactID是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
-----------------1 基础知识必备----------------------------
<groupId>com.yucong.commonmaven</groupId>
<artifactId>commonmaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>common_maven</name>
groupId
定义了项目属于哪个组,举个例子,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp.
artifacted
定义了当前maven项目在组中唯一的ID,比如,myapp-util,myapp-domain,myapp-web等。
version
指定了myapp项目的当前版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。
name
声明了一个对于用户更为友好的项目名称,不是必须的,推荐为每个pom声明name,以方便信息交流。
-----------------2 何为mave坐标----------------------------
maven的世界中拥有数量非常巨大的构件,也就是平时用的一些jar,war等文件。
maven定义了这样一组规则:
世界上任何一个构件都可以使用Maven坐标唯一标志,maven坐标的元素包括groupId, artifactId, version,package,classifier。
只要在pom.xml文件中配置好dependancy的groupId,artifact,verison,classifier,
maven就会从仓库中寻找相应的构件供我们使用。那么,"maven是从哪里下载构件的呢?"
答案很简单,maven内置了一个中央仓库的地址(http://repol.maven.org/maven2),该中央仓库包含了世界上大部分流行的开源项目构件,maven会在需要的时候去那里下载。
-----------------3 坐标详解----------------------------
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>
groupId
定义当前maven项目隶属的实际项目。
groupId的表示方式与Java包名的表示方式类似,如: org.sonatype.nexus
artifactId
该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目的名称作为artifactId的前缀。
如:nexus-indexer
在默认情况下,maven生成的构件,其文件名会以artifactId作为开头,如:nexus-indexer-2.0.0.jar。
packaging【可选的,默认为jar】:
当不定义packaging时,maven会使用默认值jar。
classifier:
该元素用来帮助定义构件输出的一些附属构件。
项目构件的文件名是坐标相对应的,一般的规则为:artifact-version.packing
4、父工程创建好后,必须遵循两个原则
<!--maven父工程必须遵循以下两点要求:1、packaging的标签文本内容必须设置为pom2、父工程必须删除掉src包
-->
5、创建子工程
这时候我们可以看到,子工程已经创建好了,且 parent 标签 指向了 父工程:
6、依赖版本控制(重要)
这里我留下两个 pom ,供大家参考,里面会有详细的注释
父工程 pom 文件:
<?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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.8.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><modelVersion>4.0.0</modelVersion><groupId>com.devtest.test</groupId><artifactId>maven-parent</artifactId><version>1.0.0</version><packaging>pom</packaging><!--maven父工程必须遵循以下两点要求:1、packaging的标签文本内容必须设置为pom2、父工程必须删除掉src包--><!--packaging标签 是设置打包方式,默认如果没有 packaging 标签,则打 jar 包--><!--所有依赖的版本管理--><!--通常管理版本依赖的标签名字构成由: 项目名+字段 version 来自定义--><properties><mysql.version>8.0.19</mysql.version> <!--用“ . ” 拼接--><junit-version>4.12</junit-version> <!--用“ - ” 拼接,你随意选--><spring-boot-web.version>2.1.8.RELEASE</spring-boot-web.version></properties><!--父模块加强管理子模块的所有依赖--><dependencyManagement><dependencies><!--MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--junit 依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit-version}</version></dependency><!--starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot-web.version}</version></dependency></dependencies></dependencyManagement><build><plugins><!--JDK8 编译插件 ,制定了这个才能保证编译时用1.8--><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
</project>
子工程 pom 文件:
<?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><artifactId>maven-parent</artifactId><groupId>com.devtest.test</groupId><version>1.0.0</version><relativePath>../mavenparent/pom.xml</relativePath></parent><modelVersion>4.0.0</modelVersion><artifactId>son01</artifactId><!--指定继承父工程的依赖--><!--你点开右侧的 maven看一下 ,是不是版本一致,大功告成!这样做之后,所有的父工程中的 依赖版本 就把子工程的控制住了,当然,如果你强行不想用父工程的依赖,也可以自己加上 依赖的 <version>标签。--><dependencies><!--MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--junit 依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version> <!--不使用父工程的依赖版本--></dependency><!--starter-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!--打包必须放在子项目中--><build><plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
二、第二种创建方式(推荐)
第二种其实和第一种类似,主要有一个地方变化一下
创建子工程时,把模块添加到父工程下:
这样做之后目录结构是这样的:
推荐的目录结构如下:
父工程pom:
<?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.dev.test</groupId><artifactId>parent</artifactId><version>1.0.0</version><packaging>pom</packaging><modules><module>common</module><module>product</module></modules></project>
common 的 pom:
<?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><artifactId>parent</artifactId><groupId>com.dev.test</groupId><version>1.0.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>common</artifactId><properties><mysql.version>8.0.19</mysql.version> <!--用“ . ” 拼接--><junit-version>4.12</junit-version> <!--用“ - ” 拼接,你随意选--><skipTests>true</skipTests> <!--跳过测试类--></properties><dependencyManagement><dependencies><!--MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--junit 依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit-version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></dependencyManagement><build><plugins><!--JDK8 编译插件 ,制定了这个才能保证编译时用1.8--><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
</project>
子工程 pom :
<?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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.8.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><modelVersion>4.0.0</modelVersion><artifactId>product</artifactId><dependencies><dependency><groupId>com.dev.test</groupId><artifactId>common</artifactId><version>1.0.0</version></dependency><!--MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--junit 依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><!--spring web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
三、打包
先执行父工程 clean 、install
再执行打包工程的:
其他的使用基本和第一种一模一样,快去试试吧!!!
maven多模块项目管理(帮助你解决许多的依赖版本问题)相关推荐
- 解决springboot maven多模块项目打包的时候某个被依赖的模块报错找不到main class
springboot maven 多模块项目打包的时候某个被依赖的模块报错 [ERROR] Failed to execute goal org.springframework.boot:spring ...
- maven多模块项目管理及parent标签
1.题记 最近刚完成一个用Maven构建的Web项目,看了一些Maven方面的书,比如<maven实战>,但还是对Maven多模块项目理解得不清晰,所以花了一点时间好好研究了下,现分享如下 ...
- maven 分模块项目 主子pom之间的引入依赖关系
在项目时用到maven管理项目,在一个就项目的基础上开发新的项目:关于子项目和父项目,子项目与子项目之间的调用问题,发现自己存在不足,以下是自己查询的问题,解决了自己的疑惑. 原文链接:https:/ ...
- eclipse中用maven多模块管理,然后主项目无法调用其他被依赖项目里的方法,解决办法
eclipse中用maven多模块管理,然后主项目无法调用其他被依赖项目里的方法,解决办法 参考文章: (1)eclipse中用maven多模块管理,然后主项目无法调用其他被依赖项目里的方法,解决办法 ...
- Maven多模块项目中应用maven-tomcat-plugin热部署
Maven多模块项目中使用maven-tomcat-plugin热部署 比如有一个父模块xfl(类型为pom的maven项目),其中的pom.xml为: <modules> <mod ...
- IntelliJ-将Java项目/模块转换为Maven项目/模块
本文翻译自:IntelliJ - Convert a Java project/module into a Maven project/module I have a project on Bitbu ...
- 在Eclipse中创建Maven多模块工程的例子
参考:http://ju.outofmemory.cn/entry/75620 如果,你需要创建多个项目,项目之间即独立又有关系,那么创建一个Maven多模块项目是个非常好的选择,也非常cool!怎么 ...
- Maven学习总结(14)——Maven 多模块项目如何分工?
2019独角兽企业重金招聘Python工程师标准>>> 一.开场白 使用Maven有段时间了,只能感慨真是个好东西,让我从传统模式体会到了严谨.规范.敏捷.方便的特性. 如果你懂Ma ...
- Maven 3-Maven依赖版本冲突的分析及解决小结
举例 A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖). ...
最新文章
- 老视频修复爆火,却惹恼了历史学家:这并不是照片的本质
- [转]linux解压 tar命令
- 关于Git的几个使用技巧
- Win32多线程编程(5) — 线程局部存储
- Amount Format in SAP Fiori Opportunity
- 封装js千分位加逗号和删除逗号
- scrape创建_确实在2分钟内对Scrape公司进行了评论和评分
- 可输入可下拉的输入选择框
- MessageQueue的使用方法(二)
- 地方时太阳时html源码,地方时和标准时(25页)-原创力文档
- GDI+ C 画图 输出文字
- Linux 安装NDK
- 虚拟机之Jvm、dalvik、art联系和区别
- 计算机网络中速率(date rate)和带宽的区别
- 计算机网络 中 网络层
- 微服务架构设计基础-(2):微服务架构的特性
- jdk版本特性一览(持续补充新版本)
- 计算机网络文件丢失怎么找回,电脑上的数据误删除了怎么恢复?教你几招!
- 在html中标题字体的最大取值,在HTML中,标题字体标记的最大取值是()
- 【重识云原生】第六章容器基础6.4.5.3节——Deployment实现原理解析