2016-08-03 34 views
0

最新のmaven 3.3.9を使用しています。これはjava 8を強制し、java 7のツールチェーンを使用してJava 7でプロジェクトをコンパイルしようとしています。ビルドでMavenツールチェーンが起動しない

次のとおり:The maven guide私はツールチェーンのプラグインを試して、Java 7を使ってアプリケーションをコンパイルするように指示しました。次のように私のプロジェクトのセットアップは次のとおりです。

  • top_module - >(本のpom.xmlにMavenのツールチェーンプラグインに入れている)

    --- submodule1

    --- submodule2

これは私の親のpom.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>parent</groupId> 
     <artifactId>build-base</artifactId> 
     <version>1.0.17</version> 
    </parent> 

    <groupId>top_module</groupId> 
    <artifactId>top_module</artifactId> 
    <version>1</version> 
    <packaging>pom</packaging> 
    <name>${project.artifactId}</name> 

    <modules> 
     <module>submodule1</module> 
     <module>submodule2</module> 
    </modules> 

    <properties> 


     ... 

    </properties> 

    <dependencyManagement> 
     <dependencies> 

      <dependency> 
       ... 
      </dependency> 
      <dependency> 
       ... 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      ... 
     </dependency> 
    </dependencies> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <!-- Ensure we compile as the correct jdk version --> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.1</version> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-toolchains-plugin</artifactId> 
        <version>1.1</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>toolchain</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <toolchains> 
          <jdk> 
           <version>1.7</version> 
           <vendor>sun</vendor> 
          </jdk> 
         </toolchains> 
        </configuration> 
       </plugin> 

       <!-- Maven WAR Plugin --> 
       <plugin> 
        <artifactId>maven-war-plugin</artifactId> 
        <version>${maven.war.plugin.version}</version> 
        <inherited>true</inherited> 
        <configuration> 
         <archiveClasses>true</archiveClasses> 
        </configuration> 
       </plugin> 

       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>org.apache.maven.plugins</groupId> 
             <artifactId>maven-enforcer-plugin</artifactId> 
             <versionRange>[1.0.0,)</versionRange> 
             <goals> 
              <goal>enforce</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <ignore /> 
            </action> 
           </pluginExecution> 
          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 

      </plugins> 
     </pluginManagement> 
    </build> 

    ... 

</project> 

プラグインがjava 8と互換性がないために、mvn clean installを実行してもビルドでツールチェーン関連の手順が実行されず、ツールチェーンが実行されていないことを意味します。私はポンで何か他のものが必要ですか?

これは私のM2_HOMEの私toolchains.xmlファイルです:あなただけのMavenは、Java 7のJDKのすべての時間を使いたい場合は、ツールチェーンのプラグインが必要以上かもしれ

<?xml version="1.0" encoding="UTF8"?> 
    <toolchains> 
     <!-- JDK toolchains --> 
     <toolchain> 
     <type>jdk</type> 
     <provides> 
      <version>1.6</version> 
      <vendor>sun</vendor> 
     </provides> 
     <configuration> 
      <jdkHome>C:\Java\jdk1.6.0_45</jdkHome> 
     </configuration> 
     </toolchain> 

      <toolchain> 
     <type>jdk</type> 
     <provides> 
      <version>1.7</version> 
      <vendor>sun</vendor> 
     </provides> 
     <configuration> 
      <jdkHome>C:\Java\jdk1.7.0_79</jdkHome> 
     </configuration> 
     </toolchain> 
    </toolchains> 

答えて

5

を(またはEclipseからの場合は、ワークスペースのデフォルトとして設定)すべてpluginManagement中のプラグインがありますが、このようにそれらを定義する必要があります。

<build> 
    <pluginManagement> 
    <plugins> 
     <!-- Ensure we compile as the correct jdk version --> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-toolchains-plugin</artifactId> 
     <version>1.1</version> 
     </plugin> 

     <!-- Maven WAR Plugin --> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>${maven.war.plugin.version}</version> 
     <inherited>true</inherited> 
     <configuration> 
      <archiveClasses>true</archiveClasses> 
     </configuration> 
     </plugin> 

     <plugin> 
     <groupId>org.eclipse.m2e</groupId> 
     <artifactId>lifecycle-mapping</artifactId> 
     <version>1.0.0</version> 
     <configuration> 
      <lifecycleMappingMetadata> 
      <pluginExecutions> 
       <pluginExecution> 
       <pluginExecutionFilter> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-enforcer-plugin</artifactId> 
        <versionRange>[1.0.0,)</versionRange> 
        <goals> 
        <goal>enforce</goal> 
        </goals> 
       </pluginExecutionFilter> 
       <action> 
        <ignore /> 
       </action> 
       </pluginExecution> 
      </pluginExecutions> 
      </lifecycleMappingMetadata> 
     </configuration> 
     </plugin> 

    </plugins> 
    </pluginManagement> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-toolchains-plugin</artifactId> 
     <executions> 
     <execution> 
      <goals> 
      <goal>toolchain</goal> 
      </goals> 
      <configuration> 
      <toolchains> 
       <jdk> 
       <version>1.7</version> 
       <vendor>sun</vendor> 
       </jdk> 
      </toolchains> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 


</build> 

... 

</project> 

pluginManagementは、バージョンと、デフォルトの構成を定義することを意図していないが、何もあなたはMavenの-ツールチェーン - プラグインのために実行する必要がありlifeycleに結合されます。プラグイン管理では、使用しているバージョンのプラグインをすべて定義する必要があります。これは、maven-resources-plugin、maven-install-plugin、maven-deploy-plugin、maven-enforcer-pluginなどを意味します。すべてのものを定義する親pom。 そして、コードで使用されているMavenとJDKで使用されるJDKを分離するための最良の方法です。

最小と としてそのMaven 3.3.9 needs JDK 7から離れて

ない JDK 8

+0

ありがとうございました!はい、それはプラグイン管理にあったからです。また、私はどこかでmaven 3.3.9がjava 8を強制していることを思い出したと思っていましたが、それを指摘してくれてありがとう:) – Pete

-1

。 JAVA_HOMEを設定するだけで十分です。

JAVA_HOMEがJDKの場所に設定されていることを確認してください。 JAVA_HOME =/usr/java/jdk1.7。*をエクスポートし、$ JAVA_HOME/binがPATH環境変数にあることを確認してください。問題は、単にあなたが定義されていることが関係しているあなただけの1プロジェクトからJDK切り替えたい場合は、あなたもCOMPILERVERSIONタグを使用することができます https://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

+0

ツールチェーンは、Mavenの中に行くには最高とcorrectes方法です。 JAVA_HOMEを使用すると、Maven用のJDKと、自分の好きではないコードが定義されます。 compilerVersionタグは別として、使用するJDKを変更する正しい方法ではありません。コンパイルにのみ使用しますが、問題を引き起こす可能性のあるテストの実行には使用しません。 – khmarbaise

関連する問題