一.Maven项目打包的两种方式

二.如何优雅地修改多模块maven项目中的版本号

三.一个项目使用另一个项目

 一.Maven项目打包的两种方式:

1.依赖工具比如eclipse

2.使用命令行:

使用cmd进入到pom对应的目录下:

执行:mvn  clean install 指令。

二.如何优雅地修改多模块maven项目中的版本号?

当我们用maven建立一个项目时,包含了多个子model,我们想把一个子model打包deploy到私服上去,需要:

1.从父节点把整个project都deploy上去,这时别人才能拉去到你上传的model。

2.保证整个project中所有model的version是一致的。

对于version,我们可以使用-SNAPSHOT这种方式,这样所有model都是一致的,每次发布也不会有问题。但如果项目发展比较快,需要使用release版本发布,由于release版本每次deploy时版本号不能重复,所以就需要每次都修改父model的version和子model的parent中的version。这时,就会有以下问题需思考:

正式版不能重复发布,所以版本号每次上线都要更改
当项目中包含几个子模块时,通常我们想让子模块的版本号跟父项目的版本号一致
子模块也会相互依赖
最容易解决的是问题3,maven有一个内置属性${project.version}表示的是项目的版本号,当一个子模块依赖其他子模块时我们可以这样写:

<parent>
<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>1.0.0</version>
<relativePath>..</relativePath>
</parent>
<artifactId>module-artifactId</artifactId>
<dependency>
<artifactId>other-module-artifactId</artifactId>
<groupId>other-module-groupId</groupId>
<version>${project.version}</version>
</dependency>

子POM的groupId和version可以省略,这样只要保证子模块的版本号都一致就不会有问题了。但是<parent>标签中的版本号还是要写,不然会报错,显然maven没有进化到这么智能的程度,或者可能会造成其他混乱而必须指定。而投机取巧地把<parent>标签中的版本号换成${project.version}也没有成功,因为必须先初始化<parent>标签才能知道${project.version}是多少。

但是maven除了内置属性之外还可以自定义属性,我们可以在父pom中这样写:

<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>${parent-version}</version> <properties>
<parent-version>1.0.0</parent-version>
</properties>

在子pom中这样写:

<parent>
<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>${parent-version}</version>
<relativePath>..</relativePath>
</parent>

这样写达到了只修改一处的目的,但是在mvn install时会提示 <parent> 标签中的version不是一个常量,未来的版本可能不支持,而且各个子模块单独mvn install时可能会失败。

最终比较折中的解决方案是使用了maven的插件来解决,在父pom中这样写:

前边废话了一大堆,后边的才是重点

<groupId>parent-groupId</groupId>
<artifactId>parent-artifactId</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
</plugins>
</build>

只需要执行mvn -N versions:update-child-modules则会自动把子POM的<parent>标签中的version更新为和父POM一致。这样修改一处然后运行一下执行一下命令就可以达到统一修改版本号的目的了。(在父model上执行后,所有子model中parent中的version都会修改)

mvn  versions:update-child-modules: 自动把子POM的<parent>标签中的version更新为和父POM一致

mvn versions:set -DnewVersion=0.0.2-SNAPSHOT:更新的父及子Module的版本号都改成了0.0.2-SNAPSHOT.

mvn versions:commit :如果没有在父pom用引入插件,Maven还会生成一个pom.xml.versionsBackup的备份文件,还需要mvn versions:commit提交

如果没有在父pom用引入插件,

 <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>

Maven还会生成一个pom.xml.versionsBackup的备份文件,还需要mvn versions:commit提交

或者执行

mvn versions:set -DnewVersion=2.0.0-SNAPSHOT -f pom.xml

然后项目中的依赖以及聚集的依赖版本都会被一起更新,也可以采用通配符来进行匹配

mvn versions:set -DgroupId=org.apache.maven.* -DartifactId=* -DoldVersion=2.* -DnewVersion=2.1.0-SNAPSHOT

 三.一个项目使用另一个项目

1.打成jar包引入项目依赖,详见:

如何在Maven项目中引入自己的jar包

2.maven工程项目与项目之间的依赖方式

参考:https://blog.csdn.net/qq_28524127/article/details/80475398

首先看一下项目结构:

1、需要在父工程中把子工程为坐标引进来,同时标注父工程为pom工程:

2、同时在父工程中把子工程当作一个模块引进来

子工程的version可以写成

<version>${project.version}</version>

3、需要在每一个子项目中通过parent标签,标注为父工程,代表他需要依赖的父工程。同时拥有父工程的所有依赖:

问题:那这种形式的项目,怎么部署在Tomcat上啊?父工程也要部署在Tomcat上吗?还是只需要子工程部署在Tomcat上就可以了?

子工程部署在Tomcat上就可以了,会以jar的形式加载父工程

Maven版本管理的更多相关文章

  1. 10 Maven 版本管理

    Maven 版本管理 一个健康的项目通常有一个长期.合理的版本演变过程.例如 Maven 本身的版本也比较多,如最早的 Maven1:Maven2 有 2.0.9.2.0.10.2.1.0.2.2.0 ...

  2. Maven学习总结(24)——Maven版本管理详解

    Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习.而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定. 一.如何衡量项目 ...

  3. Maven版本管理-Maven Release Plugin插件

    一.什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基 ...

  4. 纯干货!华为软件开发云编译构建之Maven

    一.Maven介绍 Maven是一个项目管理和整合的工具.Maven为开发者提供了一套完整的构建生命周期框架.开发团队基本不用花多少时间就能自动完成工程的基础构建配置,因为Maven使用了一个标准的目 ...

  5. Maven - 实例-1-手工创建Maven项目

    1- 根据包结构创建maven项目目录 TestMaven - src - src/main/java/anliven/testmaven01/HelloMaven.java - src/test/j ...

  6. Maven 进阶

    一.Maven 版本管理 Maven 的推荐版本号约定为:主版本号.次版本号.增量版本号-<里程碑版本> 开发中的版本要以 -SNAPSHOT 结尾,因为这种快照版本是支持 jar 包被覆 ...

  7. Maven基础命令

    Maven 参数 -D 传入属性参数 -P 使用pom中指定的配置 -e 显示maven运行出错的信息 -o 离线执行命令,即不去远程仓库更新包 -X 显示maven允许的debug信息 -U 强制去 ...

  8. 【构建工具】《Maven实战》读书笔记

    Maven是我们在做Java开发过程中用经常用到的一个辅助工具.本篇博客是我学习Maven的一个记录博客,学习过程主要参考<Maven实战>这本书.同时也参考了Maven的官方文档. 1. ...

  9. mvn常用指令记录

    maven工程版本号更新: -------------------------------------------------------------------------------------- ...

随机推荐

  1. Reshaper \ VSCode快捷键

    Reshaper 常用快捷键 Alt + F7:查找引用 Ctrl + N:Go To Everything 定位到任何,非常强大 Ctrl + Shift + N:Go To File 定位到文件 ...

  2. Docker搭建ES集群

    Spring Boot连接ES,spring-boot-starter-data-elasticsearch. 必须为集群方式!否则报错! 报错: None of the configured nod ...

  3. centos7下python2环境安装pip2、kazoo、bottle、beaker

    摘自:https://mp.weixin.qq.com/s?src=11&timestamp=1576355125&ver=2034&signature=mNp2na6VjFz ...

  4. IDEA中不编译src/main/java目录下的*.xml文件

    使用idea构建maven项目时不编译src/main/java目录下写的mapper.xml文件,这是找到pom.xml文件,在<build>节点下添加如下代码: <!-- map ...

  5. PAT 甲级 1086 Tree Traversals Again (25分)(先序中序链表建树,求后序)***重点复习

    1086 Tree Traversals Again (25分)   An inorder binary tree traversal can be implemented in a non-recu ...

  6. [LeetCode] 93. Restore IP Addresses 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  7. [LeetCode] 128. Longest Consecutive Sequence 求最长连续序列

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  8. [LeetCode] 250. Count Univalue Subtrees 计算唯一值子树的个数

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  9. idea的groovy设置

    idea的groovy设置 groovy使用的是java的jdk 新建groovy项目,第一次新建的时候,Groovy library是空的,需要点击右边的Create...新建. 但是由于brew ...

  10. Django文档阅读之查询

    创建对象 为了在Python对象中表示数据库表数据,Django使用直观的系统:模型类表示数据库表,该类的实例表示数据库表中的特定记录. 要创建对象,请使用模型类的关键字参数对其进行实例化,然后调用s ...