0

我正在使用Maven 3.2.3。我有一個多模塊項目,目前已經把我的Maven編譯器插件設置爲這樣

    <plugin> 
          <groupId>org.apache.maven.plugins</groupId> 
          <artifactId>maven-compiler-plugin</artifactId> 
          <version>3.1</version> 
          <configuration> 
            <source>1.6</source> 
            <target>1.6</target> 
            <compilerArgument>-proc:none</compilerArgument> 
            <fork>true</fork> 
            <!-- <debug>true</debug> <debuglevel>none</debuglevel> --> 
          </configuration> 
          <executions> 
            <execution> 
              <id>default-testCompile</id> 
              <phase>test-compile</phase> 
              <goals> 
                <goal>testCompile</goal> 
              </goals> 
            </execution> 
          </executions> 
        </plugin> 

什麼我不知道是我怎麼可以設置基於$ JAVA_HOME變量的編譯器版本在我的系統,這意味着,如果$ JAVA_HOME指向Java 6安裝,我的Maven編譯器將使用「1.6」作爲源和目標。同樣,如果我的$ JAVA_HOME指向Java 7安裝,則源和目標將爲「1.7」等等。如果環境中沒有設置$ JAVA_HOME,我希望編譯器默認爲1.6。

感謝您提供關於如何設置的建議和示例。

+0

這根本不可能,也沒有意義,因爲你的構建會依賴於環境。最好的做法是像你已經做的那樣在你的構建中定義源/目標級別。此外,你應該使用[maven-enforcer-plugin來強制使用哪個JDK](http://maven.apache.org/enforcer/enforcer-rules/requireJavaVersion.html)。除此之外,如果你還沒有設置JAVA_HOME,你可以創建一個JDK來運行Maven。 – khmarbaise

+0

構建不會environemtn depednent,我只是尋找一種方法來編譯我的源代碼基於$ JAVA_HOME var設置爲什麼,而不必在我的pom中硬編碼版本。不可能?來吧,夥計。一切皆有可能! –

回答

0

正如Jarrod指出的,解決方案是使用profiles。使用從maven文檔提供的示例。

配置文件可以根據檢測到的構建環境的狀態 自動觸發。這些觸發器通過配置文件中的 部分指定。目前,此檢測 僅限於JDK版本的前綴匹配,系統屬性的存在或系統屬性的值。這裏有一些 的例子。

當JDK的 版本 「1.4」(如 「1.4.0_08」, 「1.4.2_07」, 「1.4」)開始下面的配置將觸發配置文件:

見下文實例與您的示例和maven doc示例合併。

<profiles> 
    <profile> 
    <activation> 
     <jdk>1.6</jdk> 
    </activation> 
    <build> 
     <plugins> 
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.1</version> 
        <configuration> 
          <source>1.6</source> 
          <target>1.6</target> 
          <compilerArgument>-proc:none</compilerArgument> 
          <fork>true</fork> 
          <!-- <debug>true</debug> <debuglevel>none</debuglevel> --> 
        </configuration> 
        <executions> 
          <execution> 
            <id>default-testCompile</id> 
            <phase>test-compile</phase> 
            <goals> 
              <goal>testCompile</goal> 
            </goals> 
          </execution> 
        </executions> 
      </plugin> 
     </plugins> 
    </build> 
    </profile> 
</profiles> 
0

Guide to building for different environments using Profiles

建立針對不同的環境相同的神器一直是一個煩惱。您有多個環境,例如測試和生產服務器,或者可能是一組使用不同配置運行相同應用程序的服務器。在本指南中,我將解釋如何使用配置文件構建和打包爲特定環境配置的工件。請參閱Introduction to Build Profiles以獲得關於概況概念的更深入解釋。

+0

這裏還沒有做出邏輯上的跳躍 - 我的bash shell中的$ JAVA_HOME設置如何激活配置文件?你是否還建議我必須爲每個可以想到的Java版本創建一個不同的配置文件? –

+0

您是否閱讀過有關配置文件的「」?這些都是極其詳細的解釋。 –