Что заставляет импортированный проект Maven в Eclipse по умолчанию использовать Java 1.5 вместо Java 1.6 и как я могу гарантировать, что это не так?

185

Я импортировал проект Maven, и он использовал Java 1.5, хотя у меня есть 1.6, настроенный как мой Eclipse по умолчанию Preferences->Java->Installed JREs.

Когда я сменил проект Maven на использование 1,6 JRE, он все еще имел ошибки сборки, оставшиеся после того, как проект использовал Java 1.5 (я описал эти ошибки сборки ранее: я есть ошибки сборки с m2eclipse, но не с maven2 в командной строке - это моя метаклассы неправильно сконфигурированы?)

Я собираюсь удалить проект и повторить попытку, но я хочу убедиться, что на этот раз он использует Java 1.6 с самого начала, чтобы убедиться, что это устраняет проблемы с сборкой.

Как я могу убедиться, что проект использует Java 1.6 при импорте?

  • 4
    m2eclipse игнорирует то, что вы конфигурируете для Eclipse по умолчанию. Он всегда будет использовать 1,5 по умолчанию. Однако в вашем случае проект использует плагин maven-compiler-plugin и явно устанавливает версию 1.5. Вам нужно будет изменить это в pom и обновить конфигурацию проекта, чтобы изменить версию. Однако я уже попробовал это, и у меня это не сработало. Я уверен, что это не проблема, несмотря на то, что другие говорили на ваш другой вопрос.
  • 1
    Нет, m2eclipse не всегда будет по умолчанию равным 1,5, это будет значение по умолчанию для настроек maven-compiler-plugin.
Показать ещё 2 комментария
Теги:
maven-2
m2eclipse
build-error

10 ответов

215
Лучший ответ

Плагин m2eclipse не использует значения по умолчанию Eclipse, плагин m2eclipse получает настройки из POM. Поэтому, если вы хотите, чтобы проект Maven был настроен на использование настроек Java 1.6 при импорте в Eclipse, настройте 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).

  • 0
    Именно так. Не исправлю ошибки компиляции.
  • 1
    Пожалуйста, не кричите. Это просто грубо. Это сработало после удаления и повторного импорта проекта. Но не иначе.
Показать ещё 3 комментария
23
<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>
  • 0
    мне не нравится этот ответ, потому что это всего лишь код, и я не вижу преимущества перед принятым (возможно, потому что он не описан ..)
20

Я хотел добавить что-то к уже предоставленному ответу. maven-compiler-plugin по умолчанию будет скомпилировать ваш проект с использованием Java 1.5, где m2 получит свою информацию.

Вот почему вы должны явно объявить maven-compiler-plugin в своем проекте с чем-то другим, кроме 1.5. Ваш эффективный pom.xml неявно использует набор по умолчанию в maven-compiler-plugin pom.xml.

  • 6
    для меня это более четко отвечает "почему это 1,5, когда я делаю новый проект Maven?"
  • 1
    @LIttleAncientForestKami проверен на 3.7.0, к настоящему времени значения установлены как константы DEFAULT_SOURCE и DEFAULT_TARGET , но все равно оба установлены на 1.5.
Показать ещё 3 комментария
19

Я добавил это в свой pom.xml ниже описания проекта, и он сработал:

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>
  • 1
    Это проще, чем принятый ответ, и также было хорошо для меня.
  • 1
    Это сработало для меня, однако принятый ответ не сработал.
Показать ещё 4 комментария
5

Ваша JRE, вероятно, была определена в конфигурации запуска. Выполните следующие шаги в Eclipse, чтобы изменить JRE сборки.

1) Щелкните правой кнопкой мыши проект и выберите Запустить как > Запустить конфигурации

2) В окне Run Configurations выберите конфигурацию сборки проекта на левой панели. Справа вы увидите различные вкладки: Main, JRE, Refresh, Source,...

3) Нажмите вкладку JRE, вы увидите что-то вроде этого

Изображение 6836

4) По умолчанию будет использоваться JRE по умолчанию для работы (JRE, который вы выбираете по умолчанию в разделе Настройки > Java- > Установленные JRE). Если вы хотите использовать другую установленную JRE, поставьте галочку в поле Альтернативный JRE и выберите нужный JRE из раскрывающегося списка.

  • 0
    Спасибо за этот ответ, моя конфигурация запуска работала с рабочим пространством по умолчанию, так что это действительно помогло!
  • 0
    Это помогло, не могу поверить, что мы упустили это из виду!
2

Вот основная причина java 1.5:

Также обратите внимание, что в настоящее время исходный параметр по умолчанию равен 1,5, а целевой целевой параметр по умолчанию - 1,5, независимо от JDK, с которым вы запускаете Maven. Если вы хотите изменить эти значения по умолчанию, вы должны установить источник и цель.

Ссылка: Плагин компилятора 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),

Это можно получить по этой команде из командной строки 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 Compiler Plugin "3.1, поскольку он доступен в банке и откройте его в любом инструменте сжатия файлов, например 7-zip

Поверните банку и найдите

plugin.xml

файл внутри папки

Maven-компилятор-плагин-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. Например, та же проблема возникает в IntelliJ IDEA при создании проекта Maven с артефактом quickstart .
  • 0
    Привет, спасибо за публикацию основной причины проблемы :) Я действительно ценю это!
1

Специальные настройки проекта

Еще одно место, где это может пойти не так, - это конкретные настройки проекта в Eclipse.

  • Свойства проекта: щелкните проект и выполните одно из следующих действий:

    • Alt + Enter
    • Меню > Проект > Свойства
    • щелкните правой кнопкой мыши свой проект > свойства проекта (последний элемент в меню)
  • нажмите "Компилятор Java"

  • Снимите флажок "Включить специальные настройки проекта" (или измените их вручную).

Из-за требований клиентов мы позволили им поддерживать наши проекты в 1.6. Когда понадобилось обновить до 1.7, нам было нелегко, потому что нам нужно было изменить версию Java по всему месту:

  • project POM
  • Рабочая область Eclipse по умолчанию
  • конкретные параметры проекта
  • выполнение виртуальной машины (1.6 использовалось для всего)
1

Я обнаружил, что моя проблема заключалась в том, что кто-то передал файл .project и .classpath, который имел ссылки на Java1.5 в качестве JRE по умолчанию.

<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, я смог правильно настроить проект на использование JRE рабочего пространства или соответствующего jdk, не возвращая его обратно до 1.5. Таким образом, не проверяйте в SVN файлы .project и .classpath

Надеюсь, это поможет другим.

1

Еще одна возможная причина, если вы используете Tycho и Maven для сборки пакетов, что в файле манифеста (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 генерировал старый уровень соответствия из-за манифеста. Я подумал, что поделился опытом.

0

Простейшее решение в Springboot

Я расскажу вам более простой, если вы используете Springboot:

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

Затем щелкните правой кнопкой мыши проект Eclipse: Maven > Обновить проект > Обновить конфигурацию проекта из pom.xml

Это должно сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню