一.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. 【mybatis源码学习】mybatis的参数处理

    一.mybatis的参数处理以及参数取值 1.单个参数 mybatis不做任何处理 取值方式: ​ #{参数名/任意名} <!-- Employee getEmpById(Integer id) ...

  2. uboot中工具buildman的用法

    1. buildman简介 uboot源码中维护的一款多线程编译测试工具 2. buildman的用法 2.1 进入uboot的源码目录 $ cd <path of uboot> 2.2 ...

  3. [译]使用BeautifulSoup和Python从网页中提取文本

    如果您要花时间浏览网页,您可能遇到的一项任务就是从HTML中删除可见的文本内容. 如果您使用的是Python,我们可以使用BeautifulSoup来完成此任务. 设置提取 首先,我们需要获取一些HT ...

  4. node 报错 env: node\r: No such file or directory

    最近在编写一个命令行工具.使用 npm link 时可以正常运行.但是 ctrl+s 保存后, 再运行则报错 env: node\r: No such file or directory ,需要再 n ...

  5. Jmeter-Critical Section Controller(临界区控制器)(还没看,是一个控制请求按顺序执行的东东)

    The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will ...

  6. linux广播

    linux广播 // 发送端 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #incl ...

  7. java方法重写的规定

    java方法重写的规定: 方法的声明: 权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{ // 方法体 } 子类中的叫重写的方法, 父类中的叫被重写的方法 子类重写的方法的方法名 ...

  8. nRF24L01P数据传输速率

    项目要用nRF24L01P做语音的传输,数据量可想而知. 发送端按照8KHz/s采样率,每次采样双声道,16位深度(2Bytes). 数据量算一下就是8000x2x2=32000(Bytes) nRF ...

  9. Docker入门以及常用命令

    目的: Docker入门 Docker简介 Centos7安装Docker Docker HelloWorld运行原理解析 阿里云镜像仓库配置 Docker常用命令 Docker基本命令 Docker ...

  10. java接口幂等性校验

    关于接口幂等性的概念: 幂等性:同一接口调用多次(使用相同的参数),对系统的影响是相同的. 怎样才是对系统有影响? 有影响--->增删改操作,修改一个用户信息,删除用户与某人的关联关系,生成一个 ...