一.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}表示的是项目的版本号,当一个子模块依赖其他子模块时我们可以这样写:

  1. <parent>
  2. <groupId>parent-groupId</groupId>
  3. <artifactId>parent-artifactId</artifactId>
  4. <version>1.0.0</version>
  5. <relativePath>..</relativePath>
  6. </parent>
  7. <artifactId>module-artifactId</artifactId>
  8. <dependency>
  9. <artifactId>other-module-artifactId</artifactId>
  10. <groupId>other-module-groupId</groupId>
  11. <version>${project.version}</version>
  12. </dependency>

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

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

  1. <groupId>parent-groupId</groupId>
  2. <artifactId>parent-artifactId</artifactId>
  3. <version>${parent-version}</version>
  4.  
  5. <properties>
  6. <parent-version>1.0.0</parent-version>
  7. </properties>

在子pom中这样写:

  1. <parent>
  2. <groupId>parent-groupId</groupId>
  3. <artifactId>parent-artifactId</artifactId>
  4. <version>${parent-version}</version>
  5. <relativePath>..</relativePath>
  6. </parent>

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

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

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

  1. <groupId>parent-groupId</groupId>
  2. <artifactId>parent-artifactId</artifactId>
  3. <version>1.0.0</version>
  4. <build>
  5. <plugins>
  6. <plugin>
  7. <groupId>org.codehaus.mojo</groupId>
  8. <artifactId>versions-maven-plugin</artifactId>
  9. <version>2.3</version>
  10. <configuration>
  11. <generateBackupPoms>false</generateBackupPoms>
  12. </configuration>
  13. </plugin>
  14. </plugins>
  15. </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用引入插件,

  1. <plugin>
  2. <groupId>org.codehaus.mojo</groupId>
  3. <artifactId>versions-maven-plugin</artifactId>
  4. <version>2.3</version>
  5. <configuration>
  6. <generateBackupPoms>false</generateBackupPoms>
  7. </configuration>
  8. </plugin>

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

或者执行

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

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

  1. 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可以写成

  1. <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. 用于KV集群的一致性哈希Consistent Hashing机制

    KV集群的请求分发 假定N为后台服务节点数,当前台携带关键字key发起请求时,我们通常将key进行hash后采用模运算 hash(key)%N 来将请求分发到不同的节点上, 后台节点的增删会引起几乎所 ...

  2. 运维笔记--ubuntu服务器安装telnet服务

    ubuntu 16.04 安装Telnet: Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.可以通过Telnet实现远程登录服务器,同时也可以用“t ...

  3. 解决VS Code开发Python3语言自动补全功能

    1.打开设置界面 2)使用快捷键组合[Ctrl+Shift+p] . 输入setting,选中首选项的user setting模式设置界面 在打开的User Settings文件界面,搜索:pytho ...

  4. 【翻译】Flink Table Api & SQL — SQL

    本文翻译自官网:SQL https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sql.html Flink Tab ...

  5. [LeetCode] 268. Missing Number 缺失的数字

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  6. 给通过canvas生成的二维码添加logo

    以jquery.qrcode为例来说, 生成二维码代码: 依赖jquery.js, jquery.qrcode.js //计算宽,高,中心坐标,logo大小 var width = 256,heigh ...

  7. web动静分离

    1 动态资源和静态资源 动态资源:多次访问页面,原代码会发生改变,比如jsp 静态资源:多次访问页面,原代码不发生改变,比如html,css 2 动静分离 将动态资源(jsp)放在tomcat服务器中 ...

  8. 【转帖】MySQL用得好好的,为什么要转ES?

    MySQL用得好好的,为什么要转ES? http://developer.51cto.com/art/201911/605288.htm Elasticsearch作为一款功能强大的分布式搜索引擎,支 ...

  9. linux系统状态脚本

    #!/bin/bashprintf "%10s\n" "##主机名##"printf "%-10s\n" "$(hostname) ...

  10. 14 IO流(十一)——装换流InputStreamReader与OutputStreamWriter

    什么是转换流 首先,这里的转换流指的是InputstreamReader与OutputStreamWriter. 正如它们的名字,它的作用是将字节流转换为字符流. 为什么要转换为字符流呢?因为对于获取 ...