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

Я импортировал проект 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 при импорте?

+185
источник поделиться
10 ответов

Плагин 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).

+215
источник
<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>
+24
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

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

+20
источник

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

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>
+19
источник

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

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

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

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

enter image description here

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

+5
источник

Вот основная причина 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>

Удачи.

+2
источник

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

+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
источник

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

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

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

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

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

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

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

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

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

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

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

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос