web-dev-qa-db-ja.com

Mavenがjenkinsで間違ったJDKでビルドされる

Jenkins Mavenジョブを実行しようとすると、次のエラーが発生します。

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project myProject: Fatal error compiling: invalid target release: 1.8 -> [Help 1]

これは、MavenがJava 1.8を使用しているが、Java 1.7。

Mavenをデバッグモードで実行すると、正しいバージョンが表示されました。

...
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven305
Java version: 1.7.0_71, vendor: Oracle Corporation
Java home: /var/lib/jenkins/tools/hudson.model.JDK/JDK_7u71/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.8.0-44-generic", Arch: "AMD64", family: "unix"
...

JenkinsサーバーはJava 1.8で実行されます

...
$ Java -version
Java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
...
$ javac -version
javac 1.8.0_74
...

空のMavenリポでジョブを実行して、Mavenに使用するバージョンを正確に伝えましたが、成功しませんでした。

私はこのようにMavenを呼び出します:

mvn clean install -X -DskipTests -Dmaven.repo.local=../testrepo -Djava.version=1.7

私は何か間違ったことをしていますか?

11
fa94

ようやく何が問題なのかわかりました。

私のビルドでは、ネクサスサーバーからダウンロードした別のモジュールを使用しています。誰かがミスをして、バージョン管理下にあるものと同期していないバージョンをネクサスにアップロードしました。ネクサスのバージョンにはJava 1.8が指定されていますが、バージョン管理下のバージョンにはJava 1.7があるため、以前は気づきませんでした。

すばらしい回答をありがとうございました。

0
fa94

適切な解決策は、必要なJDKをJenkinsグローバル構成に追加し、プロジェクトのビルド構成で必要なJDKバージョン/インストールを具体的に選択することです。

まず、必要なJDKをビルドマシンにコピーします。次に、Jenkins構成を開き、[JDK]セクション[Jenkins-> Manage Jenkins-> Configure System]までスクロールします。 Jenkinsに必要なJDKを追加します。次の図は、2つの異なるJDKで構成されたJenkinsの例です。 JDK installations under Jenkins

これで、プロジェクト構成[YourProject-> Configure]の下で、新しいオプションが利用可能になります。次の図のように、目的のJDKを選択してプロジェクトをビルドできます。 enter image description here

「(デフォルト)」のJVMは、Jenkinsが実行されるJDKを指します。簡単な修正は、このJDKをプロジェクトに必要なバージョンに変更することです(Jenkins起動スクリプトを変更するか、Java_HOMEを使用して)。これは動作します。ただし、2つ以上の競合するプロジェクトをビルドする必要がある場合は、とにかく複数のJDKを構成する必要があります。

同様の手順を使用して、Jenkinsサーバーに複数のMavenインストールを追加できます。

14
Talijanac

Jenkins 2.60.1(2017年6月)LTS以降、MavenジョブにはJDK 1.8以上が必要です。 Mavenジョブのみがこれを必要とします。残りすべて(たとえば、フリースタイルのもの)は、ニーズに最も適合するjdkバージョンを修正できます。

LTS変更ログ を参照してください:

2.60.1は、実行にJava 8を必要とする最初のJenkins LTSリリースです。Mavenプロジェクトタイプを使用している場合、Jenkinsを実行できるJDKを使用する必要があることに注意してください。 JDK 8以降:Mavenプロジェクトで古いJDKを設定すると、Jenkinsは新しいJDKを見つけて自動的に使用しようとします。

互換性に関する注意

Java 7でのMavenプロジェクトタイプの使用

「Mavenプロジェクト」タイプで設定されたジョブを持つユーザーは、Java 7をMavenジョブに使用できない場合があります。正しい動作は保証されないため、自己責任で続行してください。MavenプロジェクトはJenkins Remotingは、Maven実行可能ファイル内に「インターセプター」を確立します。このため、MavenはRemotingおよびその他のJenkinsコアクラスを使用しており、この動作により更新が中断される可能性があります。

0
Pedro

Jenkins 2.7.3(およびそれ以降)では、メニューのナビゲーションが少し異なります。

1)ジェンキンスを管理する

2)グローバルツール構成

3)JDKセクション

4)「JDK installations」ボタンを押します

5)JDKオプションとパスがあります

0
joro

次の手順を試してください。

1)[Jenkinsの管理]-> [システムの構成]に移動します

2)グローバルプロパティ->環境変数にJava_HOMEとそのパスを追加します。

3)JDKセクションにJDKとパスを追加します

多くの解決策がここに提供されているので、そうでない場合は、この投稿を試してください: Mavenは誤ったJava Jenkinsによって実行されるときにバージョンを使用します

0
deeveeABC