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

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

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

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

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

Ответы [ 12 ]

241 голосов
/ 22 августа 2010

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

29 голосов
/ 27 июля 2016

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

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>
27 голосов
/ 07 января 2012

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

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

26 голосов
/ 20 февраля 2015
<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>
6 голосов
/ 04 апреля 2017

Вот основная причина 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 (Effective 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-компилятор-плагин-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>

Удачи.

6 голосов
/ 24 февраля 2015

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

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

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

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

enter image description here

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

2 голосов
/ 13 ноября 2017

Самое простое решение в Springboot

Я дам вам самое простое решение, если вы используете Springboot:

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

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

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

2 голосов
/ 10 ноября 2016

Настройки проекта

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

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

    • Alt + Enter
    • Меню> Проект> Свойства
    • щелкните правой кнопкой мыши свой проект> свойства проекта (последний пункт в меню)
  2. нажмите «Java Compiler»

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

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

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

Я обнаружил, что моя проблема была в том, что кто-то зафиксировал файл .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 голос
/ 23 сентября 2013

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

...