将代码推到gitlab之后,在Jenkins构建的时候,偶尔会遇到微服务模块之间互相依赖的版本报错,获取不到最新的版本。有点被maven的install和deploy搞乱了,所以写个文章梳理一下
jar包和代码之间的关系
项目部署是什么意思?
- 部署一个项目,只是意味着将它的代码上传到云服务器,项目运行的时候会使用最新上传的代码。而项目依赖的jar包,在运行时都会从指定的仓库下载
- 如何实现从指定的仓库下载?
- 在Intellij里面,对maven进行设置
- 打开指定路径的 conf\settings.xml
- 在Intellij里面,对maven进行设置
maven的命令
- clean - 清理项目构建目录,删除target目录;但不会删除本地maven仓库已生成的jar包
- compile:编译项目代码,生成target目录
- package:将Java项目进行打包,Jar包或者war包;还包括compile命令,生成target目录
- install:包括了package命令;还将项目安装到本地的maven仓库,以便本地的项目拉取依赖
- deploy用于将项目的artifacts(比如jar包,或者war包) 发布到远程仓库,以便其他开发人员可以依赖它
版本管理
- 版本号的组成:1.0.0 - snapshot
- 第一个数字表示主版本号,架构有重大变化
- 第二个数字表示次版本号,有较大范围的功能变化,及bug修复,但不涉及架构变化
- 第三个数字表示增量版本号,重大bug修复
- 最后一个表示,里程碑版本:常见的是snapshot,还有alpha,beta
- snapshot和release的区别
- snapshot代表不稳定、开发中的快照版本,可以覆盖
- 支持不改version而引入新版本,但是maven或者idea并不是非常频繁去拉取更新 - 时间据说是1-2天
- 手动触发拉取更新,通过Jenkins pipeline脚本
- release则代表稳定的,发行版本,通常不允许覆盖,只允许发布一次
- snapshot代表不稳定、开发中的快照版本,可以覆盖
前提知识
Target目录
- 编译结果:Java文件编译生成的class文件,会被放在 target/classes 文件夹下
- 资源文件:非JAVA源码的文件,例如配置文件,属性文件
- 依赖文件:项目依赖的外部库(如JAR文件)通常存放在target/lib或者使用Maven等构建工具时,通过依赖管理工具自动下载到target或target/lib目录
- 构建产物(build results):构建完成后生成的可执行文件(如JAR文件或WAR文件)通常放在target目录下
- 其他临时文件:构建过程中生成的临时文件和日志文件,如编译过程中的中间文件、编译日志等,可能会放在target目录或其子目录中
编译和构建的区别
编译:
- 将高级编程语言(如Java、C、C++等)写成的源代码文件转换成目标代码的过程。目标代码通常是机器能够理解和执行的低级代码形式,或者是更高级别的字节码(比如Java的字节码)。主要目的是将源代码转换为计算机能够直接执行的形式
构建:
- 通过执行一系列的任务和操作,将源代码转换为可执行软件系统或者软件模块的过程
- 一般包括,编译,依赖管理,资源管理,打包和部署