Подтвердить что ты не робот

Что заставляет импортированный проект 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 при импорте?

4b9b3361

Ответ 1

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

Ответ 2

<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>

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Ваша 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 из раскрывающегося списка.

Ответ 6

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

Удачи.

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

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

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

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

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

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

Ответ 10

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

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

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

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

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