更新
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