首页 > 代码库 > 程序必修改课之maven实用命令
程序必修改课之maven实用命令
总结一下我在工作中用的比较多的一些Maven命令.
1. mvn clean 这个命令可以清理maven编译的target目录.
扩展:我们在建目录结构时一般都会建议一个<packaging>pom</packaging>的parent工程,这样我们在parent目录中运行mvn clean命令即可清理所有的子工程的target.
目录结构举例:
......
<groupId>com.tgb.lk</groupId>
<artifactId>lk-example-parent</artifactId>
<packaging>pom</packaging>
<modules>
<module>../lk-example-core</module>
<module>../lk-example-web</module>
<module>../lk-example-api</module>
<module>../lk-example-common</module>
</modules>
......
2.mvn package 这个命令可以打出安装包(jar,war,ear等),在构建时会下载相应的jar(注意:这时不一定能关联下载pom,若想关联下载相关的pom需要使用mvn dependency:tree命令)
3.mvn dependency:tree这个命令可以把pom之间的引用关系展示出来,会自动下载相关的pom(注意:这个命令不一定下载关联所有引用的jar).
命令的结果举例:
扩展:直接在命令行中运行该命令显示在黑窗口中,不便于查找,我们可以用mvn dependency:tree>1.txt 将内容输出到文件中,这样可以在文件中直接查找.
4.mvn dependency:copy-dependencies 这个命令可以将在pom中直接引入和间接引入的jar全部关联出来复制到./target/dependency文件夹下.
扩展:我们可以用该命令的输出结果并结合mvn dependency:tree帮我们解决jar版本冲突问题.
例如(下面的这个错误你可能经常碰到哦~),我们的pom中这样写
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.16.3</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.16.3</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.16.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.2.RELEASE</version>
</dependency>
发现调试的时候总是运行时报错,通过mvn dependency:copy-dependencies查看到引用的jar中spring的版本有4.1.2.RELEASE还有3.0.5.RELEASE的版本
此时我们可以断定是spring版本冲突造成的错误了,但是哪些jar导致间接引入了3.0.5的版本呢?通过mvn dependency:tree可以帮我们定位到间接引用的出处,如下:
[INFO] +- org.apache.struts:struts2-core:jar:2.3.16.3:compile
[INFO] | +- org.freemarker:freemarker:jar:2.3.19:compile
[INFO] | +- ognl:ognl:jar:3.0.6:compile
[INFO] | | \- javassist:javassist:jar:3.11.0.GA:compile
[INFO] | +- commons-fileupload:commons-fileupload:jar:1.3.1:compile
[INFO] | \- commons-io:commons-io:jar:2.2:compile
[INFO] +- org.apache.struts.xwork:xwork-core:jar:2.3.16.3:compile
[INFO] | +- org.apache.commons:commons-lang3:jar:3.1:compile
[INFO] | +- asm:asm:jar:3.3:compile
[INFO] | \- asm:asm-commons:jar:3.3:compile
[INFO] | \- asm:asm-tree:jar:3.3:compile
[INFO] +- org.javassist:javassist:jar:3.18.2-GA:compile
[INFO] +- org.apache.struts:struts2-spring-plugin:jar:2.3.16.3:compile
[INFO] | +- org.springframework:spring-context:jar:3.0.5.RELEASE:compile
[INFO] | | +- org.springframework:spring-aop:jar:3.0.5.RELEASE:compile
[INFO] | | | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] | | +- org.springframework:spring-expression:jar:3.0.5.RELEASE:compile
[INFO] | | \- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile
[INFO] | \- org.springframework:spring-web:jar:4.1.2.RELEASE:compile
[INFO] +- org.apache.struts:struts2-json-plugin:jar:2.3.16.3:compile
[INFO] +- org.springframework:spring-core:jar:4.1.2.RELEASE:compile
通过以上结果可以分析出是由于org.apache.struts:struts2-spring-plugin:jar:2.3.16.3这个jar间接引出的3.0.5的版本,怎么能解决呢,三种思路:
1.在pom引用中加入排除,如<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>
这样写了对于程序不需要此jar的即可解决,但本例中的spring-context.jar是程序运行必须引入的.所以考虑第2种
2. <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.2.RELEASE</version>
</dependency>
5.mvn dependency:analyze 这个命令可以我们分析依赖.
扩展:eclipse由于maven插件集成的不是太好,有些jar间接关联出的jar不能被加载,导致在eclipse运行报错,通过此命令就能帮我们找出那些jar是代码编译时就必须引入而你没有在pom中声明引入的.
暂时先整理这些,以后再继续补充.
程序必修改课之maven实用命令
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。