web-dev-qa-db-ja.com

Mavenが使用するJDKを指定する

変更したHudsonプラグインをビルドしようとしていますが、jdk1.6が必要です。これは問題ありませんが、異なるjdkがどこにあるかをMavenに伝える方法がわかりません。私はインターネット上でいくつかの言及を見つけましたが、それらは私には当てはまらないようです。 .m2/settings.xmlに設定を追加することを提案する人もいますが、私はsettings.xmlを持っていません。さらに、すべてのMavenビルドに1.6を使用したくありません。

1つの欠点は、cygwinでmvnを使用しているということです。プロジェクトのpomファイルで仕様を作成できるはずですが、既存のpomはかなりむき出しです。

要するに、mavenの1回の呼び出しにjdkを指定する方法はありますか?

117
DanInDC

要するに、mavenの1回の呼び出しにjdkを指定する方法はありますか?

Java_HOMEを一時的に変更します。

114
Pascal Thivent

Mavenはここで解決策を提供しているようです: 異なるJDKを使用してソースをコンパイルする

Java_HOMEがJDK7(mavenプロセスを実行する)を指しているとします

あなたのpom.xmlは:

<build>
    <plugins>
        <!-- we want JDK 1.6 source and binary compatiblility -->
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- ... -->
        <!-- we want sources to be processed by a specific 1.6 javac -->
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <verbose>true</verbose>
              <fork>true</fork>
              <executable>${Java_1_6_HOME}/bin/javac</executable>
              <compilerVersion>1.3</compilerVersion>
            </configuration>
        </plugin>
    </plugins>
</build>

開発者がsettings.xmlに次の行を追加(およびカスタマイズ)するだけの場合、pomはプラットフォームに依存しません。

<settings>
  [...]
  <profiles>
    [...]
    <profile>
      <id>compiler</id>
        <properties>
          <Java_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</Java_1_4_HOME>
          <Java_1_6_HOME>C:\Program Files\Java\j2sdk1.6.0_18</Java_1_6_HOME>
        </properties>
    </profile>
  </profiles>
  [...]
  <activeProfiles>
    <activeProfile>compiler</activeProfile>
  </activeProfiles>
</settings>
72
Cerber

compile:compile には ユーザープロパティ があり、javacへのパスを指定できます。

このユーザープロパティは、forktrueである場合にのみ機能することに注意してください。これはデフォルトではfalseです。

$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile

値にスペースが含まれる場合は、値を二重引用符で囲む必要があります。

> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile

Mavenカスタムプロパティの優先順位 も参照してください。

25
Jin Kwon

Uが言ったように、「プラス、すべてのMavenビルドに1.6を使用したくありません」。

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.9</source>
                <target>1.9</target>
            </configuration>
        </plugin>
    </plugins>
</build>

特定のプロジェクトがそのバージョンのjdkを使用するようにします。

23
DevCoder

Pascalが言っているように、Java_HOMEをセットアップすると言います。cygwinでは、bashを使用する場合、シェルは「export Java_HOME =/cygdrive/c/pathtothejdk」である必要があり、Java bin dirを「export PATH = $ {Java_HOME}/bin:$ {PATH}」を含むPATH

また、正しいjdkが使用されるようにmaven-enforce-pluginを追加します。これはあなたのポンにとって良い習慣です。

<build>
 <plugins>
   <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-enforcer-plugin</artifactId>
      <executions>
        <execution>
          <id>enforce-versions</id>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <requireJavaVersion>
                <version>1.6</version>
              </requireJavaVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

http://maven.Apache.org/plugins/maven-enforcer-plugin/usage.html

14
feniix

古いスレッドを知っています。しかし、Maven for Java 8コンパイラソースでこれに似た問題がいくつかありました。 この記事 に記載されている簡単な修正でこれを理解しました。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
11
user2214297

Mavenは変数$ JAVACMDを最後のJavaコマンドとして使用し、Java実行可能ファイルがMavenを別のJDKに切り替える場所に設定します。

5
Lin Gao

Hudsonでは、いくつかのJavaランタイムを定義し、これらのいずれかでMavenを呼び出すこともできます。設定ページをよく見てください。

Java 9の場合:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>9</source>
                <target>9</target>
            </configuration>
        </plugin>
    </plugins>
</build>
1

Windows 7上のEclipse内でmavenのビルドに問題がありました。

私はmvn buildがコマンドラインからうまく動いているのを観察しましたが。

mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug  --settings ..\..\infra-scripts\maven-conf\settings.xml   > output.log

EclipseはデフォルトのJVMとしてJDKではなくJREインストールを検討していたため、コンパイルに失敗していました。

次の行をEclipse.iniに追加しました。

-vm
C:\Program Files (x86)\Java\jdk1.8.0_25\bin

また、Eclipseから開始するとき、リストの次の「目標」セクションで使用しました。

-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug  --settings ..\..\infra-scripts\maven-conf\settings.xml

コンパイルエラーが解決しました。

0
aprodan