2010-08-21 31 views
188

Zaimportowałem projekt Maven i użyłem Java 1.5, mimo że mam skonfigurowany 1.6 jako domyślny Eclipse Preferences->Java->Installed JREs.Co powoduje, że zaimportowany projekt Mavena w środowisku Eclipse domyślnie korzysta z Java 1.5 zamiast Java 1.6 i jak mogę to zagwarantować?

Kiedy zmienił projekt Maven korzystania z 1.6 JRE to jeszcze błędy kompilacji pozostały od kiedy projekt był przy użyciu Java 1.5 (opisałem je zbudować błędy wcześniej: I have build errors with m2eclipse but not with maven2 on the command line - is my m2eclipse misconfigured?)

jadę aby usunąć projekt i spróbować ponownie, ale chcę się upewnić, że tym razem używa Java 1.6 od samego początku, aby zobaczyć, czy to eliminuje problemy z kompilacją.

Jak mogę się upewnić, że projekt korzysta z języka Java 1.6 podczas importowania?

+4

m2eclipse ignoruje konfigurację domyślną Eclipse. Zawsze będzie domyślnie używać 1.5. Jednak w twoim przypadku projekt wykorzystuje wtyczkę maven-compiler i wyraźnie ustawia wersję na 1.5. Będziesz musiał to zmienić w pom i zaktualizować konfigurację projektu, aby zmienić wersję. Jednak już to wypróbowałem i nie zadziałało to dla mnie. Jestem pewien, że to nie problem, pomimo tego, co powiedzieli inni w twoim drugim pytaniu. –

+1

Nie, m2eclipse nie zawsze będzie domyślnie 1.5, domyślnie będzie to ustawienie wtyczki maven-compiler. –

+1

Jak zmienić ustawienia wtyczki maven-compiler? – Lokathor

Odpowiedz

221

Wtyczka m2eclipse nie używa domyślnych ustawień Eclipse, wtyczka m2eclipse określa ustawienia z POM. Więc jeśli chcesz projekt Maven być skonfigurowany do korzystania z Java 1.6 ustawienia gdy importowane pod Eclipse, skonfigurować maven-compiler-plugin odpowiednio, jak już zasugerował:

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

Jeśli projekt jest już importowane, zaktualizować konfigurację projektu (kliknij prawym przyciskiem myszy na projekt, następnie Aktualizacja projektu Maven V).

+0

Dokładnie.Nie naprawi jednak błędów kompilacji. –

+1

Proszę nie krzyczeć. To po prostu niegrzeczne. To działało po usunięciu i ponownym imporcie projektu. Ale nie inaczej. –

+6

@Raoul Działa bez ponownego importowania projektu, jeśli ** Zaktualizuj konfigurację projektu **, tak jak napisałem. Zrobiłem to 3 razy i to działa na mojej maszynie. –

22

Chciałem dodać coś do podanej już odpowiedzi. maven-compiler-plugin domyślnie skompiluje twój projekt za pomocą Java 1.5, która jest tam, gdzie m2e dostaje jego informacje.

Dlatego musisz jawnie zadeklarować w swoim projekcie maven-compiler-plugin coś innego niż 1.5. Twój efektywny pom.xml domyślnie użyje domyślnego zestawu w maven-compiler-pluginpom.xml.

+6

dla mnie to bardziej wyraźne odpowiedzi "dlaczego jest 1.5 kiedy tworzę nowego Mavena? projekt?" – mmcrae

+1

Zweryfikowano przez 'maven-compiler-plugin' 3.5.1: Zobacz linie 132 i 138 dla domyślnych wartości Strings' source' i 'target': http://svn.apache.org/viewvc/maven/plugins/tags/ maven-compiler-plugin-3.5.1/src/main/java/org/apache/maven/plugin/compiler/AbstractCompilerMojo.java? view = markup Możesz go dodać do swojej odpowiedzi @Nicholas –

+1

@LIttleAncientForestKami zweryfikowane z 3.7.0, wartości są teraz ustawione jako stałe "DEFAULT_SOURCE" i "DEFAULT_TARGET", ale nadal oba ustawione są na 1.5. – Kidburla

1

Jeszcze jedna możliwa przyczyna jeśli używasz Tycho i Maven zbudować wiązek, że masz zły środowisko wykonawcze (Bundle-RequiredExecutionEnvironment) w pliku manifestu (manifest.mf) zdefiniowane. Na przykład:

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

W moim przypadku wszystko inne było w porządku. Wtyczki kompilatora (normalnie maven i teno również) zostały ustawione poprawnie, nadal generowany stary poziom zgodności z powodu manifestu. Myślałem, że dzielę się tym doświadczeniem.

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

Wewnątrz

5

Twoje środowisko JRE zostało prawdopodobnie zdefiniowane w konfiguracji uruchamiania. Wykonaj następujące kroki w środowisku Eclipse, aby zmienić środowisko JRE budowy.

1) Kliknij prawym przyciskiem myszy na projekt i wybrać Uruchom jako >Run Konfiguracje

2) z okna Uruchom konfiguracje, wybrać konfigurację kompilacji projektu na lewym panelu. Po prawej stronie zobaczysz różne zakładki: Main, JRE, Refresh, Source, ...

3) Kliknij na zakładce JRE, powinieneś zobaczyć coś takiego

enter image description here

4) Domyślnie Domyślnie Pracuj JRE (JRE wybrać jako domyślne pod Preferencje-> Java-> zainstalowana JRE) zostaną użyte. Jeśli chcesz użyć innego zainstalowanego środowiska JRE, zaznacz pole wyboru Alternate JRE i wybierz preferowany JRE z menu rozwijanego.

+0

Dzięki za tę odpowiedź, moja konfiguracja uruchamiania była uruchomiona z domyślnym obszarem roboczym, więc to naprawdę pomogło! –

+0

To pomogło, nie mogę uwierzyć, że przeoczyliśmy to! –

1

Znalazłem, że moim problemem był ktoś, kto zatwierdził plik .project i .classpath, który odwoływał się do Java 1.5 jako domyślnego środowiska 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> 

Zamykając projekt, usuwając pliki, a następnie ponownego importowania jako projekt Maven, byłem w stanie poprawnie ustawić projektu do obszaru roboczego korzystania JRE lub JDK bez istotnych to wracając do 1,5. W ten sposób unikaj sprawdzania w swoim pliku SVN plików .project i .classpath

Mam nadzieję, że to pomoże innym.

20

Dodałem to do mojego pom.xml poniżej opisu projektu i to działało: ustawienia specyficzne

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

To jest prostsze niż zaakceptowana odpowiedź, a także było dla mnie dobre. – Brick

+1

To zadziałało, jednak zaakceptowana odpowiedź nie zadziałała. –

+0

Jaka jest różnica między tą konfiguracją a konfiguracją wtyczki kompilatora maven-compilter (zgodnie z zaakceptowaną odpowiedzią)? Oba sposoby działają dla mnie. –

1

projektowe

Jeszcze miejsce, gdzie może się nie udać się w ustawieniach poszczególnych projektów, w Zaćmienie.

  1. właściwości projektu: kliknij swój projekt i jedną z następujących czynności:

    • Alt + Enter
    • Menu> Projekt> Właściwości
    • prawym przyciskiem myszy projekt> Właściwości projektu (ostatnia pozycja menu)
  2. kliknij "Kompilator Javy"

  3. Odznacz opcję "Włącz specyficzne ustawienia projektu" (lub zmień je wszystkie ręcznie).

Ze względu na wymagania klientów mieliśmy możliwość utrzymania naszych projektów w wersji 1.6. Kiedy to było potrzebne, aby uaktualnić do 1,7, mieliśmy trudny czas, ponieważ musieliśmy zmienić wersję java wszędzie:

  • ustawienia specyficzne POM projekt
  • Eclipse Workspace domyślny
  • projektu
  • wykonania maszynę wirtualną (1,6 użyto do wszystkich)
3

Oto przyczyną Java 1.5:

Należy również pamiętać, że obecnie domyślnym ustawieniem źródła jest 1,5, a domyślnym ustawieniem docelowym jest 1,5, niezależnie od JDK, w którym uruchamiasz Mavena.Jeśli chcesz zmienić te wartości domyślne, powinieneś ustawić źródło i cel.

referencyjny: Apache Mavem Compiler Plugin

Poniżej znajdują się szczegóły:

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

Po wtyczki pochodzi z rozszerzonej wersji POM (Efektywny POM),

Można to uzyskać za pomocą tego polecenia z wiersza polecenia C:\mvn help:effective-pom I j Ustaw tutaj mały fragment zamiast całej 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> 

Nawet tutaj nie widać gdzie jest wersja Java zdefiniowane, pozwala kopać więcej ...

Pobierz wtyczkę, Apache Maven Compiler Plugin » 3.1 jak jego dostępny w słoiku i otwórz go w dowolnym narzędziem do kompresji plików takich jak 7-zip

Traverse słoika i findout

plugin.xml

plików wewnątrz folderu

Maven-compiler-plugin-3.1.jar \ META-INF \ Maven \

Teraz widać następującą sekcję w pliku

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

Sprawdź powyższy kod i znajdź następujące 2 wiersze:

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

Powodzenia.

+1

Tak. To nie ma nic wspólnego z Eclipse. Na przykład ten sam problem występuje w IntelliJ IDEA, jeśli utworzysz projekt Maven z artefaktem "quickstart". –

0

rozwiązanie Najprostszy w Springboot

dam wam najbardziej prostsze jeśli używasz Springboot:

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

Następnie kliknij prawym przyciskiem myszy na projekcie Eclipse: Maven> Project Update> Aktualizacja konfiguracja projektu z pom.xml

To powinno wystarczyć.