您的位置:首页 > 编程语言 > Java开发

Jar包冲突解决方法 Unknown lifecycle phase "mvn" Eclipse中执行maven命令

2017-05-14 10:00 627 查看
1、如下图,右击需要执行maven命令的工程,选择"Debug As"或"Run As",再选择"Maven build..."



进行如上操作之后,会出现如下图所示的对话框:



Name:可以给这个操作命令命名,每执行一个maven命令都会被保存。

Goals:输入我们需要执行的maven命令,一次执行多个命令用空格隔开。

复选框:下面的复选框可以让我们进行一些选择性的操作,如上图跳过测试

我们执行过的命令可以选择"Run Configutations..."来查看



在这里我们可以看到这个所有执行过的命令,在下图中我们可以得到如下信息:

命令对应的工程,执行的命令等。

在这个对话框中,我们可以删除命令,重命名,修改命令等操作。



上面我们说过,执行过的命令都会被保存,如果我们要执行以前执行过的命令,可以选择"Maven build":



如果我们右击的工程只执行了一条命令,那么不会弹出对话框,直接执行。

如果执行了多条命令,那么会弹出一个对话框,供我们选择需要执行哪个命令。



maven还为我们提供了一些基本的命令,如下图:



2、常用maven命令

clean:清除目标目录中的生成结果。

generate-sources:开发环境与代码分离,很少使用,执行这个命令可以通过查看.classpath和.project两个文件来查看变化。

install:在本地库中安装jar

test:运行项目中的单元测试

package:根据项目生成jar文件

tomcat*:run:启动tomcat,前提是在项目的pom.xml文件中添加了tomcat插件

eclipse:eclipse:生成Eclipse项目文件,即.classpath和.project文件

compile:编译源代码

dependency:sources:下载项目依赖的jar包的源码包

对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类、方法等,或者有时遇到一些日志系统的问题(参考另一篇文章Jar包冲突导致的日志问题),我们会遇到ClassNotFoundException,NoSuchFieldException,NoSuchMethodException
之类的运行时异常,从经验上我们就会判断,Jar包冲突了。解决Jar包冲突问题,每个人都有每个人的方法,这里我介绍一下我的方法,供大家参考。


处理方法

当遇到jar包冲突时,我们首先确定是哪个jar包冲突了,这个很容易,看我们调用的类或方法,是属于哪个Jar包。然后就是要找出冲突了,我这里使用命令
mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>


填写上Jar包的groupId和artifactId,可以只有一个,但是中间的冒号不要少,这样就会输出依赖树,而且是仅包含这个Jar包的依赖树,这样那些地方依赖了这个Jar包的那个版本就一目了然了。

例如,我的项目中notify-common包存在冲突,我们使用命令
mvn dependency:tree -Dverbose -Dincludes=:notify-common


得到依赖树输出
[INFO] com.taobao.wlb:bis-server:war:1.0-SNAPSHOT
[INFO] +- com.taobao.wlb:bis-core:jar:1.0-SNAPSHOT:compile
[INFO] |  \- com.taobao.logistics:schedule-client:jar:1.1.1:compile
[INFO] |     \- (com.taobao.notify:notify-common:jar:1.8.15:compile - omitted for conflict with 1.8.19.26)
[INFO] \- com.taobao.notify:notify-tr-client:jar:1.8.19.26:compile
[INFO]    +- com.taobao.notify:notify-common:jar:1.8.19.26:compile
[INFO]    \- com.taobao.notify:notify-remoting:jar:1.8.19.26:compile
[INFO]       \- (com.taobao.notify:notify-common:jar:1.8.19.26:compile - omitted for duplicate)


看一下依赖树中所有的叶子节点就是所有的notify-common包,我们可以看到我们依赖的bis-core中依赖了schedule-client包,它依赖了一个notify-common包,版本是1.8.15,第四行的后面也提示了这个包同其他包有冲突
- omitted for conflict with 1.8.19.26)
。而我们的系统依赖的notify-tr-client包所依赖的版本是1.8.19.26,于是我们知道是这里冲突了,在POM排除掉依赖,OK了。


说明

这里我们对我们执行的命令做一个简单的说明。
mvn dependency:tree -Dverbose -Dincludes=<groupId>:<artifactId>


第一部分
mvn dependency:tree
是maven依赖的分析命令,作用是对我们的项目的依赖进行分析,并输出项目依赖树

第二部分
-Dverbose
的作用是添加了verbose一个环境变量,起的作用是在分析项目依赖时输出明细,这样项目中依赖的所有引用都会被输出出来,包含了所有的间接引用,会有很多很多,我们只需要我们要找的,所以就需要第三个参数了

第三部分
-Dincludes=<groupId>:<artifactId>
的作用就是进行过滤,只包含我们想要的依赖的依赖时,排除掉其它不需要的,依赖树的所有叶子节点就是我们的找的依赖包。其中的groupId和artifactId可以只填写一个,为了保证准确性,一般都会填两个(填写时不包括尖括号)。
其他方法:
1、对于maven工程,我的办法是使用eclipse来解决,点开pom.xml,切换到hierarchy dependency,右上角搜索对应的包,可以清晰地看到冲突版本
2、可以使用idea,在pom.xml中右单击 选择Diagrams-》show
dependencies
3、mvn dependency:tree -Dverbose
> tree.log 
直接输出冲突的jar文件

目录:

一 环境

1.1 操作系统

1.2 软件版本

二 报错及解决

一 环境

1.1 操作系统 win10(有个奇怪的问题,我的系统明明是WIN10 ,但是mvn 识别为WIN 8.1)

1.2 eclipse + jdk7 + maven 3.2

C:\Users\tac>mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: C:\Java\apache-maven-3.2.5\bin\..
Java version: 1.7.0_67, vendor: Oracle Corporation
Java home: C:\Java\jdk1.7.0_67\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows"

二报错

1.1  mvn 命令 mvn install -Dmaven.test.skip=true  -X

报错内容

[INFO] BUILD FAILURE

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 0.184 s

[INFO] Finished at: 2016-04-06T18:52:11+08:00

[INFO] Final Memory: 5M/120M

[INFO] ------------------------------------------------------------------------

[ERROR] Unknown lifecycle phase "mv". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate,
initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package,
package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]

org.apache.maven.lifecycle.LifecyclePhaseNotFoundException: Unknown lifecycle phase "mv". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>.
Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile,
process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy.

at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateLifecycleMappings(DefaultLifecycleExecutionPlanCalculator.java:246)

at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateMojoExecutions(DefaultLifecycleExecutionPlanCalculator.java:217)

at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan(DefaultLifecycleExecutionPlanCalculator.java:127)

at org.apache.maven.lifecycle.internal.DefaultLifecycleExecutionPlanCalculator.calculateExecutionPlan(DefaultLifecycleExecutionPlanCalculator.java:145)

at org.apache.maven.lifecycle.internal.builder.BuilderCommon.resolveBuildPlan(BuilderCommon.java:96)

at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:109)

at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)

at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)

at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)

at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)

at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)

at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)

at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)

at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)

at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)

at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)

at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)

at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

[ERROR] 

[ERROR] 

[ERROR] For more information about the errors and possible solutions, please read the following articles:

[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException
1.2 解决办法

命令修改为 : install -Dmaven.test.skip=true  -X

原因: 是因为 eclispe 已经集成了mvn 所以就不需要 mvn 这三各字母了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐