EclipseにインポートされたMavenプロジェクトがデフォルトでJava 1.6の代わりにJava 1.5を使用する原因は何ですか。


209

Mavenプロジェクトをインポートし、Eclipseのデフォルトとして1.6を構成しているにもかかわらず、Java 1.5を使用しましたPreferences->Java->Installed JREs

1.6 JREを使用するようにMavenプロジェクトを変更したとき、プロジェクトがJava 1.5を使用していたときのビルドエラーが残っていました(これらのビルドエラーについては、以前に説明しました:コマンドラインでm2eclipseでビルドエラーが発生し、maven2では発生しません-m2eclipseの設定が間違っていますか?

プロジェクトを削除して再試行しますが、今回は最初からJava 1.6を使用していることを確認して、ビルドの問題が解消されるかどうかを確認します。

インポート時にプロジェクトでJava 1.6が使用されていることを確認するにはどうすればよいですか?


4
m2eclipseは、Eclipseのデフォルトに構成したものを無視します。デフォルトでは常に1.5を使用します。ただし、あなたの場合、プロジェクトはmaven-compiler-pluginを使用し、バージョンを明示的に1.5に設定します。pomでこれを変更し、プロジェクト構成を更新してバージョンを変更する必要があります。しかし、私はすでにこれを試しました、そしてそれは私にとってはうまくいきませんでした。他の質問で他の人が言ったことにかかわらず、それは問題ではないと確信しています。
ラウルデューク

1
いいえ、m2eclipseのデフォルトは常に1.5ではなく、maven-compiler-pluginの設定になります。
Pascal Thivent、2010

1
maven-compiler-pluginの設定をどのように変更しますか?
Lokathor 2013年

回答:


248

m2eclipseプラグインはEclipseのデフォルトを使用せず、m2eclipseプラグインはPOMから設定を取得します。したがって、EclipseでインポートしたときにJava 1.6設定を使用するようにMavenプロジェクトを構成したい場合はmaven-compiler-plugin、すでに提案したように適切に構成します。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

プロジェクトがすでにインポートされている場合は、プロジェクト構成を更新します(プロジェクトを右クリックして、[ Maven V Update Project Configuration])。


1
叫ばないでください。それは失礼です。プロジェクトを削除して再インポートした後でも機能しました。しかし、そうでなければ。
Raoul Duke、

6
@Raoul 私が書いたようにプロジェクト構成更新すると、プロジェクトを再インポートしなくても機能します。私はこれを3回テストしましたが、私のマシンで動作します。
Pascal Thivent 2010

パスカルの答えが明らかであるように(私は1を加えました)、「プロジェクト構成の更新」は、プロジェクトも削除する必要があったため、すべての状況で機能するようには見えず、他の多くのことを試みました(おそらくバグeclipseのバージョンで)
rogermushroom

新しいJavaバージョンについては、この回答を参照してください
Line

33

これをプロジェクトの説明の下にあるpom.xmlに追加すると、うまくいきました。

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>

1
これは受け入れられた答えよりも簡単で、私にとっても良いことでした。
ブリック

1
これは私にとってはうまくいきましたが、受け入れられた答えはうまくいきませんでした。
Sanjay Singh

1
これとmaven-compiler-pluginの構成の違いは何ですか(受け入れられた回答に従って)?両方の方法が私のために働いています。
アーミルリズ

Java 9を使用している場合は、バージョン番号が変更されていることに注意してください。したがって、1.9ではなく9を使用します。 <properties> <maven.compiler.source>9</maven.compiler.source> <maven.compiler.target>9</maven.compiler.target> </properties>
chux

プロパティ「java.version」を設定し、「maven-compiler-plugin」構成のビルド構成でそれを使用するだけで十分だと思いました。明らかに、「maven.compiler.source」および「maven.compiler.target」プロパティは、問題が消えたばかりなので、Eclipse Mavenプラグインの相互作用が必要です。
JasonTolotta

29

私はすでに提供された答えに何かを追加したかったのです。maven-compiler-pluginはデフォルトで、m2eがその情報を取得する場所であるJava 1.5を使用してプロジェクトをコンパイルします。

そのため、プロジェクトでmaven-compiler-pluginを1.5以外のもので明示的に宣言する必要があります。効果的なものpom.xmlは、暗黙的にmaven-compiler-plugin のデフォルトセットを使用しますpom.xml


6
これにより、「新しいMavenプロジェクトを作成するときに1.5になるのはなぜですか?」
Don Cheadle 2015

1
@LIttleAncientForestKamiは3.7.0で検証され、現在では値は定数DEFAULT_SOURCEととして設定されていますがDEFAULT_TARGET、どちらも1.5に設定されています。
Adam Burley

今では1.6になるはずですよね?まだ1.5を使用しているようです。
ライン

@Line:いいえ。超効果的な親pomは変更されないため、既知のmaven-verseが終了するまでは1.5になる可能性があります。
ニコラス

これは皮肉ですか?;)「現時点では、デフォルトのソースの設定は1.6で、デフォルトのターゲット設定は1.6であることにも注意してください」の答えにリンクされているサイトは言う...
ラインの

27
<project>

    <!-- ... -->

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

</project>

8
<build> </ build>の内部
Phillip Kamikaze 2015年

この答えは好きではありません。コードだけであり、受け入れられたものよりも有利な点が見当たらない(多分それが説明されていないためです。)
Line

8

Java 1.5の根本的な原因は次のとおりです。

また、現時点では、Mavenを実行するJDKに関係なく、デフォルトのソース設定は1.5で、デフォルトのターゲット設定は1.5です。これらのデフォルトを変更する場合は、ソースとターゲットを設定する必要があります。

リファレンス:Apache Mavemコンパイラプラグイン

詳細は次のとおりです。

プレーンなpom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

    <groupId>com.pluralsight</groupId>
    <artifactId>spring_sample</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

以下のプラグインは拡張されたPOMバージョン(有効なPOM)から取得され、

これは、コマンドラインからこのコマンドを使用して取得できますC:\mvn help:effective-pom。pom全体ではなく、小さなスニペットをここに配置しました。

    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
      <execution>
        <id>default-compile</id>
        <phase>compile</phase>
        <goals>
          <goal>compile</goal>
        </goals>
      </execution>
      <execution>
        <id>default-testCompile</id>
        <phase>test-compile</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

ここでも、Javaのバージョンがどこに定義されているのかわからないので、さらに掘り下げてみましょう...

プラグイン、Apache Mavenコンパイラプラグイン»3.1をjarで利用可能としてダウンロードし、7-zipなどのファイル圧縮ツールで開きます。

瓶をトラバースして見つけ出す

plugin.xml

フォルダ内のファイル

maven-compiler-plugin-3.1.jar \ META-INF \ maven \

これで、ファイルに次のセクションが表示されます。

      <configuration>
    <basedir implementation="java.io.File" default-value="${basedir}"/>
    <buildDirectory implementation="java.io.File" default-value="${project.build.directory}"/>
    <classpathElements implementation="java.util.List" default-value="${project.testClasspathElements}"/>
    <compileSourceRoots implementation="java.util.List" default-value="${project.testCompileSourceRoots}"/>
    <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
    <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
    <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
    <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
    <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel>
    <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
    <executable implementation="java.lang.String">${maven.compiler.executable}</executable>
    <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
    <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
    <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
    <generatedTestSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-test-sources/test-annotations"/>
    <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem>
    <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial>
    <mojoExecution implementation="org.apache.maven.plugin.MojoExecution">${mojoExecution}</mojoExecution>
    <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
    <outputDirectory implementation="java.io.File" default-value="${project.build.testOutputDirectory}"/>
    <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
    <showWarnings implementation="boolean" default-value="false">${maven.compiler.showWarnings}</showWarnings>
    <skip implementation="boolean">${maven.test.skip}</skip>
    <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
    <source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
    <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target>
    <testSource implementation="java.lang.String">${maven.compiler.testSource}</testSource>
    <testTarget implementation="java.lang.String">${maven.compiler.testTarget}</testTarget>
    <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
    <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
    <mavenSession implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
    <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
  </configuration>

上記のコードを見て、次の2行を見つけてください。

    <source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target>

幸運を。


1
はい。これはEclipseとは関係ありません。たとえば、quickstartアーティファクトを使用してMavenプロジェクトを作成すると、IntelliJ IDEAで同じ問題が発生します。
Jan Hettich

こんにちは、問題の根本的な原因を投稿していただきありがとうございます:)本当に感謝しています!
IanGabes

6

JREはおそらく実行構成で定義されています。Eclipseで次の手順に従って、ビルドJREを変更します。

1)プロジェクトを右クリックして、「実行」 >「実行構成」を選択します。

2)「実行構成」ウィンドウの左側のパネルでプロジェクトのビルド構成を選択します。右側には、メイン、JRE、更新、ソースなどのさまざまなタブが表示されます。

3)[JRE]タブをクリックすると、次のように表示されます

ここに画像の説明を入力してください

4)デフォルトでは、Work Default JRE(Preferences-> Java-> Installed JREsでデフォルトとして選択したJRE)が使用されます。インストールされている別のJREを使用する場合は、[ 代替JRE]チェックボックスをオンにし、ドロップダウンから希望のJREを選択します。


この回答をありがとう、私の実行構成はデフォルトのワークスペースで実行されていたので、これは本当に役に立ちました!
DamirCiganović-Janković2015

これは私たちがこれを見落としたのを助けました、信じられません!
phil

3

Springbootの最も簡単なソリューション

Springbootを使用する場合は、最も簡単な方法を紹介します。

<properties>
  <java.version>1.8</java.version>
</properties>

次に、Eclipseプロジェクトを右クリックします:Maven> Update project> Update project configuration from pom.xml

それで十分でしょう。


2

プロジェクト固有の設定

これがうまくいかないもう1つの場所は、Eclipseのプロジェクト固有の設定です。

  1. プロジェクトのプロパティ:プロジェクトをクリックし、次のいずれかをクリックします。

    • Alt + Enter
    • メニュー>プロジェクト>プロパティ
    • プロジェクトを右クリック>プロジェクトのプロパティ(メニューの最後の項目)
  2. 「Javaコンパイラ」をクリックします

  3. [プロジェクト固有の設定を有効にする]チェックボックスをオフにします(またはすべて手動で変更します)。

クライアントの要件により、プロジェクトを1.6に保つためにそれらを有効にしました。1.7へのアップグレードが必要になったとき、Javaのバージョンをあちこちに変更する必要があったため、苦労しました。

  • プロジェクトPOM
  • Eclipseワークスペースのデフォルト
  • プロジェクト固有の設定
  • 仮想マシンの実行(すべてに1.6が使用されました)

1

TychoMavenを使用してバンドルを構築している場合に考えられるもう1つの理由Bundle-RequiredExecutionEnvironmentは、マニフェストファイル(manifest.mf)に誤った実行環境()が定義されていることです。例えば:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Engine Plug-in
Bundle-SymbolicName: com.foo.bar
Bundle-Version: 4.6.5.qualifier
Bundle-Activator: com.foo.bar.Activator
Bundle-Vendor: Foobar Technologies Ltd.
Require-Bundle: org.eclipse.core.runtime,
 org.jdom;bundle-version="1.0.0",
 org.apache.commons.codec;bundle-version="1.3.0",
 bcprov-ext;bundle-version="1.47.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.5
Export-Package: ...
...
Import-Package: ...
...

私の場合、他のすべては大丈夫でした。コンパイラプラグイン(通常のmavenとtychoも)は正しく設定されていましたが、マニフェストのためにm2は古い準拠レベルを生成しました。私は経験を共有すると思いました。


1

私の問題は、デフォルトのJREとしてJava1.5への参照を持つ.projectおよび.classpathファイルを誰かがコミットしたことが原因であることがわかりました。

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
    <attributes>
        <attribute name="owner.project.facets" value="java"/>
    </attributes>
</classpathentry>

プロジェクトを閉じ、ファイルを削除してから、Mavenプロジェクトとして再インポートすることで、プロジェクトを1.5に戻さなくても、ワークスペースJREまたは関連するjdkを使用するように適切に設定できました。したがって、.projectファイルと.classpathファイルをSVNにチェックインしないでください。

これが他の人を助けることを願っています。


0

Eclipseで新しく作成されたプロジェクトまたはインポートされたプロジェクトがJava 1.5以外のデフォルトのJavaバージョンを使用するようにしたい場合は、maven-compiler-pluginで設定を変更できます。

  • フォルダー.m2 / repository / org / apache / maven / plugins / maven-compiler-plugin / 3.1に移動します
  • maven-compiler-plugin-3.1.jarをzipプログラムで開きます。
  • META-INF / mavenに移動し、plugin.xmlを開きます
  • 次の行:
    <source implementation = "java.lang.String" default-value = "1.5"> $ {maven.compiler.source} </ source>
    <target implementation = "java.lang.String" default-value = "1.5"> $ {maven.compiler.target} </ target>

  • デフォルト値を1.6または1.8または好きなものに変更します。

  • ファイルを保存し、zipファイルに書き戻されていることを確認します。

これ以降、すべての新しいMavenプロジェクトは、指定したJavaバージョンを使用します。

情報は次のブログ投稿からです:https : //sandocean.wordpress.com/2019/03/22/directly-generating-maven-projects-in-eclipse-with-java-version-newer-than-1-5/


0

JDKのバージョンを変更するには、次のようにします。

1-プロジェクト>プロパティ
2 - Javaビルドパスに移動
3-ライブラリで、JREシステム...を選択し、[編集]をクリック
4適切なバージョンを選択して検証

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