特定のJavaバージョンをMavenに設定する方法


162

私のマシンには2つのJavaバージョンがインストールされています(1.6と1.7は手動でインストールしました)。異なるプロジェクトで両方が必要です。しかし、Mavenには1.7が必要ですが、Mavenは1,6のJavaバージョンを使用していますが、Mavenを1.7に設定するにはどうすればよいですか?


マシンの設定に触れられないため、Java 1.7でJAVA_HOMEをエクスポートできません。Javaのデフォルトバージョンは1.6である必要があります。
andPat 2013年

MavenはJAVA_HOMEを使用するため、JAVA_HOMEの値を変更しなくても、やりたいことが可能であるとは思わないでください。
Zyga 2013年

1
IDEまたはコマンドラインを使用していますか?* nixまたはwindowsにいますか?
xwoker 2013年

1
この回答はあなたが望むものをカバーしていますか?stackoverflow.com/a/4724062/1570834
DB5 2013年

はい、便利ですが、プロジェクトの概要を変更することはできません。それでも、内容は同じで正解です
andPat

回答:


137

MavenはJAVA_HOMEパラメーターを使用して、実行する予定のJavaバージョンを見つけます。あなたのコメントから、設定ではそれを変更できないことがわかります。

  • JAVA_HOMEMavenを起動する直前にパラメーターを設定できます(必要に応じて、後でパラメーターを元に戻します)。
  • mvn(非Windows)/ mvn.bat/ mvn.cmd(Windows)に移動して、Javaバージョンを明示的に設定することもできます。

29
@andPat:そうですか?あなたは、設定することができますJAVA_HOME(あなたがクローズシェルは、変更がなくなっていることをするとすぐに)すべてのマシンの構成を変更することなく、ローカルのシェルに。あなたも、単一のコマンドのためにそれを変更することができますJAVA_HOME=/path/to/jdk17/ mvn build
ヨアヒム・ザウアー

@JoachimSauer:はい。ただし、Windows固有のmvn.batも参照しました。
DanielBarbarian 2013年

Macでは、JAVA_HOMEを内部に含む.mavenrcファイルを作成できます
Ronan Quillevere 2015

古いですが、私の2セントを投入します。私はJava 7アプリケーションから呼び出されるJava 8サービスに取り組んでいます。ビルド時に絶えず切り替える必要がないように、私は(Windowsで)MVN_JAVA_HOME環境変数を作成し、mvnおよびmvn.cmd内のすべてのJAVA_HOMEをMVN_JAVA_HOMEに置き換えます。
ryanlutgen 16

74

POMでは、たとえば1.8のコンパイラー・プロパティーを設定できます。

<project>
...
 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
...
</project>

9
コンパイラプラグインバージョン
3.7.0以降、

58

複数のJavaバージョンがインストールされている人のためのソリューションの追加

大規模なコードベースがあり、そのほとんどはJavaです。私が取り組んでいることの大部分は、Java 1.7または1.8で書かれています。JAVA_HOMEは静的なので、.bashrcMavenを実行するために、さまざまな値でエイリアスを作成しました。

alias mvn5="JAVA_HOME=/usr/local/java5 && mvn"
alias mvn6="JAVA_HOME=/usr/local/java6 && mvn"
alias mvn7="JAVA_HOME=/usr/local/java7 && mvn"
alias mvn8="JAVA_HOME=/usr/local/java8 && mvn"

これにより、プロジェクトで使用されているJDKバージョンに関係なく、開発マシンのコマンドラインからMavenを実行できます。


2
さまざまなプロジェクトにMaven 2と3が必要でない限り、その場合はすでに定義されていてmvn2mvn3Javaバージョンも使用されると命名が少しファンキーになります...:D
Tomislav Nakic-Alfirevic

3
Macを使用している場合、JDKにはjava_homeコマンドが付属しているため、パスのハードコーディングを回避できます。例:alias mvn8 = "JAVA_HOME=`/usr/libexec/java_home -v 1.8` && mvn
ptkvsk

5
(ubuntu + bash)では、&&before を省略しなければなりませんmvn。mvnは、JAVA_HOMEの値をで認識しません&&
Fabien

@ファビエンは知っておくと良い。私はZSHを使用していて、Bashの違いを知りませんでした
Jonathan Landrum

47

Windowsの場合

JAVA_HOMEシステム変数内で変数を変更したくない場合。

mvn.batファイルを編集して、次のような行を追加します

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45\jre

これは@REM ==== START VALIDATION ====、@ Jonathanによって言及された後に行うことができます

Mac(およびLinux?)

またはJAVA_HOME内部で変数を変更したくない場合~/.bashrc~/.bash_profile

~/.mavenrcファイルを作成JAVA_HOMEし、java_homeツールを使用して再定義できます

export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45`

サニティーチェック

次のコマンドを実行して、すべてが正常に動作していることを確認できます。jdkのバージョンは異なる必要があります。

mvn -version

その後

java -version


JAVA_HOME = C:\ Program Files \ Java \ jdk1.7.0_45 exluded jreサブフォルダーを設定するように設定しました。
nanosoft 2016年

32

私の2セントを追加し、ソリューションを明示的に提供します。

Windowsマシンに2つのJDKがインストールされています- JDK 1.5JDK 1.6

デフォルト(およびWindowsシステム環境変数にJAVA_HOME設定)はに設定されていJDK 1.5ます。

ただし、私はを使用してビルドする必要があるMavenプロジェクト(つまり、JBehaveチュートリアルのEtsy.com)を持っていJDK 1.6ます。

このシナリオでの私の解決策(うまくいった!)は、で@DanielBarbarian設定することで提案されているとおりmvn.batです。

ウィンドウのバッチファイルに精通していないいくつかのために、私は基本的に追加set JAVA_HOME=<path_to_other_jdk>の行をした後@REM ==== START VALIDATION ====mvn.bat(すなわち、%MAVEN_HOME%\bin\mvn.bat):

@REM ==== START VALIDATION ====
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45\jre
if not "%JAVA_HOME%" == "" goto OkJHome

4
maven 3.5では、mvn.batに名前が変更されましたmvn.cmd
CKM 2017

30

私は最近、Mavenで7年間働いた後、toolchains.xmlについて学びました。Mavenはそれを文書化し、2.0.9からサポートしています - ツールチェーンのドキュメント

そこで、次の内容でtoolchain.xmlファイルを〜/ .m2 /フォルダーに追加しました。

<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
 <!-- JDK toolchains -->
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.8</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java8</jdkHome>
   </configuration>
 </toolchain>
 <toolchain>
   <type>jdk</type>
   <provides>
     <version>1.7</version>
     <vendor>sun</vendor>
   </provides>
   <configuration>
     <jdkHome>/opt/java7</jdkHome>
   </configuration>
 </toolchain>
</toolchains>

これにより、Mavenを実行するJDKに関係なく、Mavenがプロジェクトのビルドに使用できるさまざまなJDKを定義できます。IDEのプロジェクトレベルでJDKを定義するときのようなものです。


2
ベストアンサー、!ありがとう。これは、Mavenとプロジェクトを2つの異なるJavaランタイム/フレームワークでコンパイルして実行する明確な状況を説明しています。
Soundararajan

5

問題の簡単な解決策の1つ-

JAVA_HOME = / usr / lib / jvm / java-6-sun / mvn clean install

Macでは、次のようになります-

JAVA_HOME = /ライブラリ/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/ mvn clean install

PS:私が見つけた特別なケースの1つは、上記のコマンドが「fish」シェルで機能しないことです。私はbashシェルも利用できましたが、そこではうまくいきました。コマンド「bash」を使用して、bashシェルに切り替えます。


5

さまざまなJDK使用してコンパイルソースを構成できますmaven-compiler-plugin

ただへのパスを指定するjavacには<executable>、タグ。たとえば、java11の場合は次のようになります。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <fork>true</fork>
        <executable>C:\Program Files\Java\jdk-11.0.1\bin\javac</executable> <!--PATH TO JAVAC -->
    </configuration>
</plugin>

4

プロジェクトと環境変数への影響を回避するために、ソースとターゲットのJavaバージョンを指定して、プロジェクトのPOMだけにMavenコンパイラプラグインを設定できます。

  <plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    ...
  </plugins>

4

以下の手順に従って、任意のJavaバージョンを使用するようにMavenを設定できます。

マシンリンクに jenvをインストールする

コマンドラインで次のコマンドを発行して、マシンにインストールされている利用可能なJavaバージョンを確認します。

jenvバージョン

次のコマンドを使用して、グローバルJavaバージョンを指定できます。

jenvグローバルoracle64-1.6.0.39

コマンドラインのディレクトリで次のコマンドを使用して、任意のディレクトリ(プロジェクト)のローカルJavaバージョンを指定できます。

jenvローカルoracle64-1.7.0.11

pom.xmlに正しいJavaバージョンを追加する

コマンドラインでmavenを実行している場合は、以下のコマンドを使用してjenv mavenプラグインをインストールしてください

jenv enable-plugin maven

これで、問題なくマシンのJavaバージョンをプロジェクトに設定できます。


1
このオプションのように。jenvはpythonのvirtualenvに似ています
Jesse Zhuang

4

Macの場合(適切なバージョンがインストールされている場合)

JAVA_HOME=`/usr/libexec/java_home -v 1.8` mvn clean install -DskipTests


4

環境変数を変更せずに、Mavenコンパイラプラグインを使用して、プロジェクトレベルに基づいてJavaバージョンを管理できます。

方法1

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

方法2

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

2

Windowsでは、次のように、さまざまなJDKバージョンの複数のバッチファイルをMaven binフォルダーに追加するだけです。

mvn11.cmd

@echo off
setlocal
set "JAVA_HOME=path\to\jdk11"
set "path=%JAVA_HOME%;%path%"
mvn %*

その後mvn11、指定したJDKでMavenを実行するために使用できます。



1

JAVA_HOMEコンソールで設定するだけではMacで成功しませんでしたが、このアプローチで成功しました

  • .mavenrcファイルをホームディレクトリに作成します(ファイルのパスは次のようになります) ~/.mavenrc
  • そのファイルに貼り付け export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

0

また、2つのバージョンのmavenをインストールし、そのうちの1つを編集して、ここで編集することもできます。

mvn(non-windows)/mvn.bat/mvn.cmd(windows)

%java_home%の外観をJavaの希望するパスに置き換えます。次に、変更されたパスからmavenを実行します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.