変更したHudsonプラグインをビルドしようとしていますが、jdk1.6が必要です。これは問題ありませんが、異なるjdkがどこにあるかをMavenに伝える方法がわかりません。私はインターネット上でいくつかの言及を見つけましたが、それらは私には当てはまらないようです。 .m2/settings.xml
に設定を追加することを提案する人もいますが、私はsettings.xml
を持っていません。さらに、すべてのMavenビルドに1.6を使用したくありません。
1つの欠点は、cygwinでmvn
を使用しているということです。プロジェクトのpomファイルで仕様を作成できるはずですが、既存のpomはかなりむき出しです。
要するに、mavenの1回の呼び出しにjdkを指定する方法はありますか?
要するに、mavenの1回の呼び出しにjdkを指定する方法はありますか?
Java_HOME
を一時的に変更します。
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>
compile:compile には ユーザープロパティ があり、javac
へのパスを指定できます。
このユーザープロパティは、fork
がtrue
である場合にのみ機能することに注意してください。これはデフォルトでは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カスタムプロパティの優先順位 も参照してください。
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を使用するようにします。
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
古いスレッドを知っています。しかし、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>
Mavenは変数$ JAVACMDを最後のJavaコマンドとして使用し、Java実行可能ファイルがMavenを別のJDKに切り替える場所に設定します。
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>
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
コンパイルエラーが解決しました。