Що змушує імпортований проект Maven в Eclipse використовувати Java 1.5 замість Java 1.6 за замовчуванням, і як я можу переконатися, що він не працює?


209

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

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

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

Як переконатися, що проект використовує Java 1.6, коли імпортую його?


4
m2eclipse ігнорує те, що налаштовано за замовчуванням Eclipse. Він завжди використовуватиме 1,5 за замовчуванням. Однак у вашому випадку проект використовує плагін maven-компілятор і встановлює версію явно 1,5. Вам потрібно змінити це в пам’яті та оновити конфігурацію проекту, щоб змінити версію. Однак я вже спробував це, і мені це не вийшло. Я впевнений, що це не проблема, незважаючи на те, що інші сказали у вашому іншому запитанні.
герцог Рауль,

1
Ні, m2eclipse не завжди буде за замовчуванням 1,5, він буде за замовчуванням у налаштуваннях maven-компілятора-плагіна.
Паскаль Thivent

1
Як ви змінюєте налаштування Maven-компілятора-плагіна?
Локотор

Відповіді:


248

Плагін 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 Оновіть конфігурацію проекту ).


1
Будь ласка, не кричіть. Це просто грубо. Це спрацювало після видалення та повторного імпорту проекту. Але не інакше.
герцог Рауль

6
@Raoul Це працює без повторного імпорту проекту, якщо ви оновите конфігурацію проекту, як я писав. Я тестував це 3 рази, і він просто працює на моїй машині.
Паскаль Thivent

Наскільки зрозуміла відповідь Паскаля (я плюс 1'd це) "конфігурація оновлення проекту", здається, не працює в будь-яких обставинах, тому що мені довелося також видалити проект, і я спробував багато іншого (можливо, помилка у версії затемнення)
rogermushroom

для нових версій Java дивіться цю відповідь
рядок

33

Я додав це до свого pom.xml під описом проекту, і він працював:

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

1
Це простіше, ніж прийнята відповідь, і для мене це було добре.
Цегла

1
Це працювало для мене, проте прийнята відповідь не спрацювала.
Санджай Сінгх

1
Яка різниця між цим та налаштуванням плагіну maven-compiler (відповідно до прийнятої відповіді)? Обидва способи працюють для мене.
Аамір Різван

Якщо ви використовуєте Java 9, майте на увазі, що нумерація версій змінилася. Тому використовуйте 9 замість 1,9. <properties> <maven.compiler.source>9</maven.compiler.source> <maven.compiler.target>9</maven.compiler.target> </properties>
chux

Я подумав, що виставити властивість "java.version" та використовувати його в конфігурації збірки конфігурації "maven-компілятор-плагін" було достатньо. Очевидно, що властивості "maven.compiler.source" і "maven.compiler.target" повинні мати деяку взаємодію з плагінами Eclipse Maven, оскільки проблема просто зникла.
JasonTolotta

29

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

Ось чому ви повинні чітко оголосити плагін maven-компілятор у своєму проекті чимось іншим, ніж 1.5. Ефективна pom.xmlбуде неявно використовувати набір за замовчуванням у плагіні maven-компілятор pom.xml .


6
мені це більш чітко відповідає "чому це 1,5, коли я роблю новий проект Maven?"
Дон Чідл,

1
@LIttleAncientForestKami перевірено з 3.7.0, до цього часу значення встановлюються як константи DEFAULT_SOURCEі DEFAULT_TARGET, але все ще обидва встановлені на 1,5.
Адам Берлі

зараз це має бути 1,6, правда? Мені здається, адже все ще здається, що для мене вона використовує 1,5.
рядок

@Line: Ні, швидше за все, це буде 1,5 до кінця відомого вірша Maven, оскільки супер ефективний батьківський пом не повинен ніколи змінюватися.
Микола

Це іронія? ;) На веб-сайті, пов’язаному у відповіді, сказано: "Також зауважте, що в даний час налаштування джерела за замовчуванням становить 1,6, а налаштування за замовчуванням - 1,6".
Рядок

27
<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>
Phillip Kamikaze

мені не подобається ця відповідь, тому що це лише код, і я не бачу переваги перед прийнятим (можливо, тому, що він не описаний ..)
рядок

8

Ось першопричина Java 1,5:

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

Довідка: плагін компілятора Apache Mavem

Нижче наведено деталі:

Простий пом.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 (Ефективна POM),

Це можна отримати за допомогою цієї команди з командного рядка, C:\mvn help:effective-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артефактом.
Ян Геттіч

Привіт, дякую за повідомлення про першопричину проблеми:) Я дуже ціную це!
IanGabes

6

Ваш JRE, ймовірно, визначений у конфігурації запуску. Виконайте ці кроки в Eclipse, щоб змінити JRE збірки.

1) Клацніть правою кнопкою миші на проект і виберіть Запустити як > Запустити конфігурації

2) У вікні Запуск конфігурацій виберіть конфігурацію побудови проекту на лівій панелі. Праворуч ви побачите різні вкладки: Main, JRE, Refresh, Source, ...

3) Клацніть на вкладці JRE, ви побачите щось подібне

введіть тут опис зображення

4) За замовчуванням буде використано JRE за замовчуванням (JRE, який ви вибрали за замовчуванням у розділі Налаштування-> Java-> Встановлені JRE ). Якщо ви хочете використовувати інший встановлений JRE, поставте прапорець Альтернативний JRE та виберіть потрібний JRE зі спадного меню.


Дякую за цю відповідь, моя конфігурація запуску працювала з робочим простором за замовчуванням, тому це справді допомогло!
Дамір Циганович-Янкович

Це допомогло, не можу повірити, що ми цього не помітили!
phil oO

3

Найпростіше рішення у Springboot

Я дам вам найпростіший варіант, якщо ви використовуєте Springboot:

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

Потім клацніть правою кнопкою миші проект Eclipse: Maven> Оновити проект> Оновити конфігурацію проекту від pom.xml

Це має зробити.


2

Налаштування проекту

Ще одне місце, де це може піти не так, - це в специфічних для проекту налаштуваннях, у Eclipse.

  1. Властивості проекту: натисніть на свій проект та виконайте одну з наступних дій:

    • Alt + Enter
    • Меню> Проект> Властивості
    • клацніть правою кнопкою миші ваш проект> властивості проекту (останній пункт у меню)
  2. натисніть на "Компілятор Java"

  3. Зніміть прапорець "Увімкнути налаштування конкретних проектів" (або змінити їх усі вручну).

Через вимоги клієнтів ми мали їм можливість підтримувати наші проекти в 1.6. Коли потрібно було оновити до 1,7, нам було важко, тому що нам потрібно було змінити версію java повсюдно:

  • проект POM
  • Eclipse Workspace за замовчуванням
  • налаштування проекту
  • виконання віртуальної машини (1.6 використовується для всього)

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


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

Сподіваюся, що це допомагає іншим.


0

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

  • Перейдіть у папку .m2 / repository / org / apache / maven / plugins / maven-compiler-plugin / 3.1
  • Відкрийте maven-компілятор-плагін-3.1.jar з програмою zip.
  • Перейдіть до META-INF / maven та відкрийте plugin.xml
  • У наступних рядках:
    <source collection = "java.lang.String" default-value = "1.5"> $ {maven.compiler.source} </source>
    <target installation = "java.lang.String" за замовчуванням = "1,5"> $ {maven.compiler.target} </target>

  • змінити значення за замовчуванням на 1,6 або 1,8 або що завгодно.

  • Збережіть файл і переконайтеся, що він записаний у zip-файл.

Відтепер усі нові проекти Maven використовують версію java, яку ви вказали.

Інформація є з наступного повідомлення в блозі: https://sandocean.wordpress.com/2019/03/22/direct-generating-maven-projects-in-eclipse-with-java-version-newer-than-1-5/


0

Щоб змінити версію JDK, ви можете:

1- Проект> Властивості
2 - Перейдіть на шлях збірки Java
3- У бібліотеках виберіть JRE System ... і натисніть кнопку Редагувати
4- Виберіть відповідну версію та підтвердіть

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.