Maven 最佳实践

添加依赖

如果需要给项目添加依赖,只需要在pom.xml的<dependencies>节点下添加相关依赖就可以。

scope 值有 compile、provided、runtime、system、test、import。默认为compile。

provided

对于开始时需要的依赖,而在运行时运行环境已经提供了的依赖,就需要额外的指定scope为provided。这样在打包时就不会把依赖打包在内。

runtime

在运行的时候才会依赖,在编译的时候不会依赖。比较典型的场景是JDBC driver 和 DataSource 连接池。开发的时候没办法直接调用相关的类但是运行的时候又存在。

system

有些jar包,nexus 公共库没有,而我们由于各种原因不想使用私服,我们可以指定scope为system, 然后配合systemPath指定jar位置。

project.basedir 表示项目根目录,即包含pom.xml文件的目录。 还有一个更老的写法basedir 已经被标记为弃用了。

Maven Model Builder – Introduction
https://maven.apache.org/ref/3-LATEST/maven-model-builder/index.html

test

在测试范围有效,在编译与打包的时候都不会使用这个依赖。

管理版本依赖

使用 dependencyManagement 管理Jar包版本。dependencyManagement 只是一个针对依赖的声明,并不真正的添加依赖。等真正添加依赖时,可以为这些依赖的某些属性提供默认值,比如版本号。
Java项目中三方Jar包非常的丰富,丰富的同时带来了依赖的混乱,通过 dependencyManagement 可以快速的统一 Jar 包版本。
以 javassist 为例,项目中依赖多个 javassist 版本。

在 pom.xml 增加以下代码

这个时候 javassist 就会被统一成 3.24.0-GA 版本了,但是还有一个漏网之鱼。

这是因为 javassist 从 3.13.x 开始变了 groupId。 我们需要单独排除这个依赖。

这样 javassist 的版本就彻底的统一了。

生成 source 和 doc

如果希望在 package install 或 deploy时自动生成.需要给 pom.xml 的 repositories 节点添加如下配置:

本地 jar 包

0x01. 上传至 Maven 私服(nexus)。

0x02. 创建项目内 Maven 库。

1 给 pom.xml 的 repositories 节点添加如下配置:

2 执行如下命令

也可以使用该脚本自动解析 jar 包名称并安装到项目 repo
install-to-project-repo

指定 JDK 版本

可以通过属性配置

也可以给 pom.xml 的 build 节点添加如下配置

最终版pom.xml

pom 的依赖是一棵树,单纯看一个pom.xml什么也看不出来这个时候我们就需要打印出依赖树:

pom.xml不仅仅是依赖,还是涉及到各个配置之间的继承覆盖,这个时候就需要查看最终的pom.xml, 在pom.xml所在的目录执行命令:

这样就可以输出一个完整的 pom.xml。
如果希望能输出到一个xml文件里:

pom.xml 片段

My pom.xml

BDF2’s dependencyManagement