更新
Plugin management是共享插件(从母公司或同一项目)的默认配置的机制,并得到由值在effective pombuild plugins
部分覆盖,这样是解决不了问题。
这可能是因为你的pom中有一个配置文件被激活,它会覆盖插件版本值(参见下面的调试,阅读你的有效pom)。注释掉(<!--
,-->
)您的pom中的配置文件节点,如果是,则重新运行构建。
如果是这种原因,您可以deactivate the profile in your pom或命令行中运行时,只是追加为Linux -P !<PROFILE_NAME>
或-P \!<PROFILE_NAME>
。
更具体地说,如果你的POM看起来是这样的:
<project>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>someGroupId</groupId>
<artifactId>someArtifactId</artifactId>
<version>versionFromPluginManagement</version>
...
</pluginManagement>
<plugins>
<plugin>
<groupId>someGroupId</groupId>
<artifactId>someArtifactId</artifactId>
<version>versionFromPlugins</version>
...
</build>
<profiles>
<profile>
<activation>
<activeByDefault>BOOLEAN_STRING</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>someGroupId</groupId>
<artifactId>someArtifactId</artifactId>
<version>versionFromProfile</version>
...
</project>
神器someGroupId:someArtifactId
在pluginManagement
,plugins
和profiles
部分定义。 版本分辨率云:
- 如果
versionFromPlugins
不定义,BOOLEAN_STRING是false
然后将得到的版本是versionFromPluginManagement
- 如果
versionFromPlugins
是定义和BOOLEAN_STRING是false
然后将得到的版本是versionFromPlugins
- 如果BOOLEAN_STRING是
true
然后将得到的版本是versionFromProfile
如果不是这样,那么请运行:这里
mvn help:effective-pom > pom.log
mvn help:effective-settings > settings.log
mvn -version > environment.log
和帖子内容。
原来的答复
是否有胜过本地POM文件配置一些全局行家设置文件?
Yes, there is。其中至少有两个:maven安装文件夹中的全局文件夹和本地存储库文件夹旁边的每个用户。
当你对你的项目运行maven时,它会用你的pom文件插入这两个文件,并计算出生成项目时应用的结果。
调试
mvn -X clean compile > build.log
- 运行行家与-X
(调试)命令行标志详细输出。由于存在大量输出,建议将其输出(>
)到文件中。这在使用错误文档的插件时特别有用,因为您可以在执行前看到所有插件属性及其实际值。
mvn help:effective-pom > pom.log
计算在构建项目时将应用的pom。它还显示活动的配置文件。
mvn help:effective-settings > settings.log
计算,这将构建项目
首先检查你的有效POM,然后调试输出时可应用的设置,最后的有效设置。
环境
很少,问题可能在环境中。你必须知道,Maven使用Java,所以你需要这些来了解你的实际环境:
java -version
mvn -version
Maven的知悉以下环境变量的环境(see its install instructions) :
M2_HOME
- maven安装文件夹根目录的绝对路径
M2
- 上面的bin
文件夹,这就是Maven的可执行文件是
JAVA_HOME
-absoulte路径JDK安装文件夹根 - 通过改变该值如果改变了Maven使用
当然在Java中,所有三个变量必须在PATH environment variable。
从pluginMangement价值得到由一个在有效POM插件部分重写为相应的插件,所以这不是(试试吧):) – linski
你是什么意思?该插件本身没有pluginManagement pom。它应该放在你的pom文件中(可能在你项目的父项目中)。 – khmarbaise
如果一个pom拥有pluginmanagement(pm)并且在它的插件(ps)中定义了一个带有组/工件/版本(gav)集的插件(p),并且在build.ps和pm.ps.pg = == b.ps.pg和pm.ps.pa === b.ps.pa然后b.ps.pv覆盖pm.ps.pv,而不是相反。如果在pom中有一个**活动**配置文件(pr),并且具有相同g和a的定义b.ps.p,则pr.b.ps.p.v将覆盖b.ps.p.v.对于缩写,我很抱歉,否则不适合评论。 – linski