Maven 实用技巧
Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven 利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
maven 也是我们日常项目中实用的包管理工具,相比以前需要用把包下载下来,放进 lib 中,在平时工作中使用的话,其实像 idea 这样的 ide 工具都会自带 maven 工具和插件
maven 的基本操作
mvn -v
查看 maven 信息mvn compile
将 Java 编译成 class 文件mvn test
执行 test 包下的测试用例mvn package
将项目打成 jar 包mvn clean
删除 package 在 target 目录下面打出来的 jar 包和 target 目录mvn install
将打出来的 jar 包复制到 maven 的本地仓库里mvn deploy
将打出来的 jar 包上传到远程仓库里
与 composer 对比
因为我也是个 PHP 程序员,所以对比一下两种语言,很容易想到在 PHP 的 composer 跟 Java 的 maven 是比较类似的作用,有一点两者是非常相似的,就是原仓库都是因为某些原因连接拉取都会很慢,所以像 composer 会有一些国内源,前阵子阿里也出了一个,类似的 maven 一般也会使用阿里的镜像仓库,通过在 setting.xml 文件中的设置
这算是个尴尬的共同点,然后因为 PHP 是解释型脚本语言,所以 php 打出来的 composer 包其实就是个 php 代码包,使用 SPL Autoload 等方式加载代码包,maven 包则是经过编译的 class 包,还有一点是 composer 也可以直接使用 github 地址作为包代码的拉取源,这点也是比较大的区别,maven 使用 pom 文件管理依赖
maven 的个人小技巧
maven 拉取依赖时,同时将 snapshot 也更新了,就是
mvn compile
加个-U
参数,如果还不行就需要将本地仓库的 snapshot 删掉,这个命令的 help 命令解释是 -U,--update-snapshots Forces a check for missing releases and updated snapshots onremote repositories,这个在日常使用中还是很经常使用的maven 出现依赖冲突的时候的解决方法首先是依赖分析,使用
mvn dependency:tree
分析下依赖关系,如果要找具体某个包的依赖引用关系可以使用mvn dependency:tree -Dverbose -Dincludes=org.springframework:spring-webmvc
命令进行分析,如果发现有冲突的依赖关系,本身 maven 中依赖引用有相对的顺序,大致来说是引用路径短的优先,pom 文件中定义的顺序优先,如果要把冲突的包排除掉可以在 pom 中用
将冲突的包排除掉
maven 依赖的 jdk 版本管理前面介绍的
mvn -v
可以查看 maven 的安装信息比如
这里可以看到用了 mac 自带的 jdk1.8,结合我之前碰到的一个问题,因为使用 homebrew 升级了 gradle,而 gradle 又依赖了 jdk13,因为这个 mvn 的 Java version 也变成 jdk13 了,然后 mvn 编译的时候出现了 java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags
这个问题,所以需要把这个版本给改回来,但是咋改呢,网上搜来的一大堆都是在 pom 文件里的 source 和 target 版本
或者修改 maven 的 setting.xml 中的
但是这些都没啥用啊,真正有办法的是建个 .mavenrc
,这个顾名思义就是 maven 的资源文件,类似于 .bashrc
和.zshrc
,在里面添加 MAVEN_HOME 和 JAVA_HOME,然后执行 source .mavenrc
就 OK 啦
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
本文作者: Nicksxs
创建时间: 2020-02-16
本文链接: Maven实用小技巧
版权声明: 本文为 InfoQ 作者【Nick】的原创文章。
原文链接:【http://xie.infoq.cn/article/86caddc9bcd0e1e260f61bf07】。文章转载请联系作者。
评论