2017-06-15 140 views
0

我對maven編譯器插件以及它做了什麼感到困惑。我有一個項目有幾個模塊。在我上面的pom.xml我有一個部分maven編譯器插件混淆

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.5.1</version> 
    <inherited>true</inherited> 
    <configuration> 
    <source>1.7</source> 
    <target>1.7</target> 
    </configuration> 
</plugin> 

我的理解是這樣的指定用於編譯代碼的JDK編譯器版本,而這部分得到由所有模塊繼承。我沒有得到的是在我的IntelliJ IDEA中,我仍然可以在設置中指定項目JDK,並且它似乎會覆蓋此設置。當我在IDE中運行Maven安裝時,我可以確認它使用JDK 8中的javac進行編譯。那麼這部分究竟做了什麼?

回答

0

你是對的; maven-compiler設置應該由子模塊繼承。

我不知道IntelliJ,但我可以告訴你,Eclipse挑選&從maven config中選擇任何想要的東西,其餘的使用它自己的設置。 因此,我期望IntelliJ可以做類似的事情?

最簡單的測試方法是通過命令行運行mvn clean install,查看哪些「勝出」。如果你得到了用1.8編譯的工件,那麼這意味着你在Maven配置中缺少一些東西,導致這些設置不能傳播給孩子。如果你得到了用1.7編譯的工件,那麼它是IntelliJ誰做的,而不是maven-compiler-plugin

+0

但我只在我的系統上安裝了JDK 8。看起來,即使我在編譯插件中設置了版本,maven仍然可以正常運行。所以這個插件是無用的? – fhcat

+0

JDK 8 _can_編譯針對JDK 7的源代碼,因此無關緊要,只有JDK 8。 插件並非無用;如果你想在沒有IntelliJ的情況下(例如通過Jenkins的CI)在外部運行你的構建,那麼它就會發揮作用。 – Andrei