5

jdk 1.7 のみを適用するために maven エンフォーサ プラグインを使用しています (java.nio.file を使用しています)。何らかの理由で、Maven Enforcer プラグインが jdk 1.7 を検出できません。

λ ~/ java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
λ ~/ javac -version
javac 1.7.0_13
λ ~/ mvn --version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 15:51:28+0200)
Maven home: /usr/local/Cellar/maven/3.0.5/libexec
Java version: 1.7.0_13, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_13.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.7.5", arch: "x86_64", family: "mac"

これは私がpom.xmlに持っているコードです -

   <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.7</version>
              </requireJavaVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>

そして、これは私が得るエラーです -

[INFO] --- maven-enforcer-plugin:1.2:enforce (enforce-versions) @ com.microsoft.gittf.core ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
Detected JDK Version: 1.6.0-43 is not in the allowed range 1.7.

編集

mvn エンフォーサ:表示情報

1.6 ではなくバージョン 1.7 が表示されます...なぜ強制が Java バージョン 1.6 を検出するのですか?

4

3 に答える 3

8

以下を追加します (または、このファイルがない場合は作成します)。~/.mavenrc

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{your-jdk-here}/Contents/Home

.mavenrcmaven によってのみ取得されるため、他の Java プログラムはこの変更の影響を受けません。

于 2013-12-04T04:31:21.557 に答える
8

バージョン宣言が修正されました。あなたが与えたのは、Javaの正確なバージョンです。使用する正確なバージョンがわからない場合は、範囲を指定してください。バージョンを [1.7,) に変更します。

          <requireJavaVersion>
            <version>[1.7,)</version>
          </requireJavaVersion>

これは、1.7 以上のバージョンが受け入れられることを意味します。

于 2013-06-05T02:23:56.203 に答える
0

実行しているOSはわかりませんが、コマンド「java ....」は、パス上でjava(またはWindowsではjava.exe)と呼ばれる最初の実行可能ファイルを見つけます。 Mavenで使用したいもの。

Linux には「alternatives」と呼ばれるシステムがあり、Java の特定のインストールを (パスをいじらない限り) ほぼ確実にパスの最初になる場所にマップします。このシステムの目的は、Java などのプログラムの多くのバージョンをシステムに保持できるようにすることであり、何か別のものを指定しない限り、1 つをデフォルトとして使用できるようにすることです。

ただし、これは、正しく実行するために JDK のインストールが必要な Maven とは関係ありません。最も明白なものを挙げると、mavenが依存するJava JDKインストール、javacコンパイラ、jarを構築するためのjar実行可能ファイルには多くの実行可能ファイルがあります。代替システムを使用すると、これらのそれぞれに代替をマップする必要があり、簡単にいくつかを見逃す可能性があります。そのため、Maven は代わりに JAVA_HOME 変数に依存しています。

Linux システムでは、JAVA_HOME 変数を設定する便利な場所の 1 つはファイル ~/.mavenrc です。このファイルが存在する場合、Maven はこのファイルを読み取ります。

于 2014-08-09T17:22:18.823 に答える