边角料记录
1.maven中的bom
BOM
全称是Bill Of Materials
,译作材料清单。它实际上就是一个普通的pom
文件,只是这个pom
中罗列了工程的依赖以及对应的版本,当其他主工程引用这个pom
时,可以直接使用其中定义的版本,springboot
就是通过这种方式,使得用户无需主动考虑spring framework
对应的版本。
一般可以通过两种方式引入BOM
,一种是使用<parent>
标签继承于父类BOM
,但是继承仅支持继承一个父类;另一种方式是通过<dependencyManagement><dependencies>
引入BOM
。
引入BOM
之后,再引入其他依赖,在<dependencies><dependency>
中只需要编写依赖的<groupId><artifactId>
不需要指定版本。
<packaging>pom<packaging>
设置之后则这个就是BOM
,BOM
的引入在External Libries
库中是获取不到。
冲突处理:优先顺序
- 当前工程显示指定版本
parent
中指定版本- 在当前工程中通过
dependencyManagement
引入的BOM
清单中的版本,当引入的多个BOM
时,先引入的BOM
生效 - 依赖调解:最短路径生效。比如存在两条对
D
的依赖A->B->C-D1.0
和A->E->D1.1
,这里最终会引用到D1.1
。
2.maven常用命令
mvn clean
: 清除目标目录中的生成结果mvn package
: 依据项目生成 jar 文件(打包)mvn install
: 在本地 Repository 中安装 jarmvn -Dmaven.test.skip=true
: 忽略测试文档编译mvn clean compile
:清理编译mvn clean test
:清理测试mvn clean package
:清理打包mvn clean package -Dmaven.test.skip=true
:清理打包生成jar包mvn clean install
:清理将打包好的jar存入 本地仓库 注意是本地仓库mvn -e
:显示详细错误mvn -U
:强制更新snapshot类型的插件或依赖库mvn -pl
: module_name在指定模块上执行命令mvn -ff
: 在递归执行命令过程中,一旦发生错误就直接退出mvn -Dxxx=yyy
: 指定java全局属性mvn -Pxxx
:引用profile xxxmvn -f pom.xml
:指定pom
文件,一般在多模块工程中,指定启动类对应模块的pom.xml
3.指定类路径
classpath
和classpath*
的区别:
classpath
:只会在当前工程/应用的类路径下匹配这个指定的类路径。
classpath*
:不仅会在当前的工程/应用的类路径下匹配,也会到引用的jar
包的类路径下匹配。
比如:
现在有一个应用,在当前应用中resources
路径下有个mapper/UserMapper.xml
文件,在引入的xiaocainiao-common
包中的resources
中也有一个mapper/PersonMapper.xml
文件。
1 | ├── src |
这时如果使用classpath:mapper/*.xml
,那么只会加载到UserMapper.xml
。
如果使用classpath*:mapper/*.xml
那么UserMapper.xml
和PersonMapper.xml
都会被加载到。
4.推送本地jar包到远程仓库
推送指定的jar
包到本地仓库或者远程仓库。
通过mvn install:install-file
将指定jar
打入本地仓库。
1 | mvn install:install-file -Dfile=/path/to/jar/file -DgroupId=com.example -DartifactId=my-jar -Dversion=1.0 -Dpackaging=jar |
-Dfile
:选项指定JAR
文件的路径,-DgroupId
、-DartifactId
和-Dversion
选项指定JAR
文件的Maven
坐标-Dpackaging
:选项指定JAR
文件的类型。
通过mvn deploy:deploy-file
将指定jar
推送远程仓库。
1 | mvn deploy:deploy-file -Dfile=/path/to/jar/file -DgroupId=com.example -DartifactId=my-jar -Dversion=1.0 -Dpackaging=jar -Durl=http://myrepo.com/nexus/content/repositories/releases/ -DrepositoryId=my-repo |
-Durl
:选项指定远程仓库的地址,-DrepositoryId
:选项指定远程仓库的ID
,这些信息需要和pom.xml
文件中的配置相匹配。-Dusername
:远程仓库账号-Dpassword
:远程仓库密码