Я импортировал проект 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 при импорте?
Плагин 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).
<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>
Я хотел добавить что-то к уже предоставленному ответу. maven-compiler-plugin по умолчанию будет скомпилировать ваш проект с использованием Java 1.5, где m2 получит свою информацию.
Вот почему вы должны явно объявить maven-compiler-plugin в своем проекте с чем-то другим, кроме 1.5. Ваш эффективный pom.xml
неявно использует набор по умолчанию в maven-compiler-plugin pom.xml
.
DEFAULT_SOURCE
и DEFAULT_TARGET
, но все равно оба установлены на 1.5.
Я добавил это в свой pom.xml ниже описания проекта, и он сработал:
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
Ваша JRE, вероятно, была определена в конфигурации запуска. Выполните следующие шаги в Eclipse, чтобы изменить JRE сборки.
1) Щелкните правой кнопкой мыши проект и выберите Запустить как > Запустить конфигурации
2) В окне Run Configurations выберите конфигурацию сборки проекта на левой панели. Справа вы увидите различные вкладки: Main, JRE, Refresh, Source,...
3) Нажмите вкладку JRE, вы увидите что-то вроде этого
4) По умолчанию будет использоваться JRE по умолчанию для работы (JRE, который вы выбираете по умолчанию в разделе Настройки > Java- > Установленные JRE). Если вы хотите использовать другую установленную JRE, поставьте галочку в поле Альтернативный JRE и выберите нужный JRE из раскрывающегося списка.
Вот основная причина 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>
Удачи.
quickstart
.
Еще одно место, где это может пойти не так, - это конкретные настройки проекта в Eclipse.
Свойства проекта: щелкните проект и выполните одно из следующих действий:
нажмите "Компилятор Java"
Из-за требований клиентов мы позволили им поддерживать наши проекты в 1.6. Когда понадобилось обновить до 1.7, нам было нелегко, потому что нам нужно было изменить версию Java по всему месту:
Я обнаружил, что моя проблема заключалась в том, что кто-то передал файл .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
Надеюсь, это поможет другим.
Еще одна возможная причина, если вы используете 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 генерировал старый уровень соответствия из-за манифеста. Я подумал, что поделился опытом.
Простейшее решение в Springboot
Я расскажу вам более простой, если вы используете Springboot:
<properties>
<java.version>1.8</java.version>
</properties>
Затем щелкните правой кнопкой мыши проект Eclipse: Maven > Обновить проект > Обновить конфигурацию проекта из pom.xml
Это должно сделать.