Eclipse'deki içe aktarılan Maven projesinin varsayılan olarak Java 1.6 yerine Java 1.5 kullanmasına neden olan şey nedir ve nasıl olmamasını sağlayabilirim?


209

Bir Maven projesini içe aktardım ve Eclipse varsayılanım olarak yapılandırılmış 1.6'm olmasına rağmen Java 1.5 kullandı Preferences->Java->Installed JREs.

1.6 JRE'yi kullanmak için Maven projesini değiştirdiğimde, proje Java 1.5'i kullanırken hala inşa hataları kaldı (Bu derleme hatalarını daha önce açıkladım: Komut satırında maven2 ile değil, m2eclipse ile derleme hataları var - m2eclipse'm yanlış yapılandırılmış mı? )

Projeyi silip tekrar deneyeceğim ama bu sefer Java 1.6 kullandığından emin olmak istiyorum.

İçe aktardığımda projenin Java 1.6 kullandığından nasıl emin olabilirim?


4
m2eclipse, Eclipse varsayılanı için yapılandırdıklarınızı yok sayar. Her zaman varsayılan olarak 1.5 kullanır. Ancak sizin durumunuzda proje maven-derleyici-eklentisini kullanır ve sürümü açıkça 1.5'e ayarlar. Pom'da bunu değiştirmeniz ve sürümü değiştirmek için proje yapılandırmasını güncellemeniz gerekir. Ancak bunu zaten denedim ve benim için işe yaramadı. Diğer sorunuzda başkalarının söylediklerine rağmen sorun olmadığından eminim.
Raoul Duke

1
Hayır, m2eclipse her zaman varsayılan olarak 1.5 değerinde olmayacak, varsayılan olarak maven-derleyici eklentisinin ayarlarına dönecektir.
Pascal Thivent

1
Maven-compiler-plugin ayarlarını nasıl değiştirirsiniz?
Lokathor

Yanıtlar:


248

M2eclipse eklentisi Eclipse varsayılanlarını kullanmaz, m2eclipse eklentisi ayarları POM'dan alır. Bir Maven projesinin Eclipse altında içe aktarıldığında Java 1.6 ayarlarını kullanacak şekilde yapılandırılmasını istiyorsanız maven-compiler-plugin, daha önce önerdiğim gibi uygun şekilde yapılandırın :

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

Projeniz zaten içe aktarılmışsa, proje yapılandırmasını güncelleyin (projeye sağ tıklayın ardından Maven V Proje Yapılandırmasını Güncelle ).


1
Lütfen bağırmayın. Bu sadece kaba. Projeyi sildikten ve yeniden içe aktardıktan sonra işe yaradı. Ama başka türlü değil.
Raoul Duke

6
@Raoul Yazdığım gibi Proje Yapılandırmasını Güncellerseniz projeyi yeniden içe aktarmadan çalışır . Bunu 3 kez test ettim ve sadece makinemde çalışıyor.
Pascal Thivent

Pascal'ın cevabı açık olduğu gibi (artı 1'ledim) 'proje yapılandırmasını güncelle', projeyi de kaldırmak zorunda kaldığım için her koşulda işe yaramıyor gibi görünüyor ve başka birçok şey denedim (belki bir hata tutulma versiyonunda)
rogermushroom

daha yeni Java sürümleri için bu cevaba bakınız
Satır

33

Bunu proje açıklamasının altındaki pom.xml'e ekledim ve işe yaradı:

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

1
Bu kabul edilen cevaptan daha basit ve benim için de iyi oldu.
Tuğla

1
Bu benim için çalıştı, ancak kabul edilen cevap işe yaramadı.
Sanjay Singh

1
Bu ve maven-derleyici-eklentisini yapılandırma arasındaki fark nedir (kabul edilen cevaba göre)? Her iki yol da benim için çalışıyor.
Aamir Rizwan

Java 9 kullanıyorsanız, sürüm numaralandırmasının değiştiğini unutmayın. Bu yüzden 1,9 yerine 9 kullanın. <properties> <maven.compiler.source>9</maven.compiler.source> <maven.compiler.target>9</maven.compiler.target> </properties>
chux

Ben bir özellik "java.version" ayarlama ve "maven-derleyici-eklenti" yapılandırma yapılandırmasında kullanarak düşündüm yeterli. Açıkçası, "maven.compiler.source" ve "maven.compiler.target" özelliklerinin, sorun ortadan kalktığında bazı Eclipse Maven eklentisi etkileşimi olmalıdır.
JasonTolotta

29

Zaten verilen cevaba bir şeyler eklemek istedim. Maven-derleyici eklenti varsayılan olarak, m2e'nin bilgilerini aldığı Java 1.5'i kullanarak projenizi derleyecektir.

Bu nedenle , projenizdeki maven-derleyici-eklentisini 1.5'ten başka bir şeyle açıkça bildirmeniz gerekiyor . Sizin etkili pom.xmlörtülü varsayılan kümesini kullanır maven-derleyici-eklentisi pom.xml .


6
bu bana daha açık bir şekilde cevap veriyor: "Yeni bir Maven projesi yaptığımda neden 1.5?"
Don Cheadle

1
@LIttleAncientForestKami 3.7.0 ile doğrulandı, şimdiye kadar değerler sabit olarak ayarlandı DEFAULT_SOURCEve DEFAULT_TARGETyine de her ikisi de 1.5'e ayarlandı.
Adam Burley

şimdi 1.6 olmalı, değil mi? Acaba hala benim için 1.5 kullanıyor gibi görünüyor.
Hat

@Line: Hayır, süper etkili ebeveyn pomunun asla değişmemesi gerektiği bilinen bilinen ayetin sonuna kadar 1.5 olacak.
Nicholas

Bu ironik mi? ;) Cevaba bağlı site "Şu anda varsayılan kaynak ayarının 1,6 ve varsayılan hedef ayarının 1,6" olduğunu unutmayın.
Hat

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

Bu kodu sevmiyorum, çünkü bu sadece kod ve kabul
Satır

8

Java 1.5'in temel nedeni:

Ayrıca, Maven'i çalıştırdığınız JDK'dan bağımsız olarak şu anda varsayılan kaynak ayarının 1.5 ve varsayılan hedef ayarının 1.5 olduğunu unutmayın. Bu varsayılanları değiştirmek istiyorsanız, kaynak ve hedef ayarlamanız gerekir.

Referans: Apache Mavem Derleyici Eklentisi

Ayrıntılar aşağıdadır:

Düz 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>

Aşağıdaki eklenti genişletilmiş POM sürümünden (Etkili POM) alınmıştır,

Bu komutla bu komuttan alabilirim, C:\mvn help:effective-pomburaya tüm pom yerine küçük bir snippet koydum.

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

Burada bile java sürümünün nerede tanımlandığını görmüyorsunuz, daha fazla kazalım ...

Eklentiyi, Apache Maven Derleyici Eklentisi »3.1'i kavanozda mevcut olarak indirin ve 7-zip gibi herhangi bir dosya sıkıştırma aracında açın

Kavanozu ve bulguyu geç

plugin.xml

klasör içindeki dosya

maven-derleyici-eklenti-3.1.jar \ META-INF \ maven \

Şimdi dosyada aşağıdaki bölümü göreceksiniz,

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

Yukarıdaki koda bakın ve aşağıdaki 2 satırı bulun

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

İyi şanslar.


1
Evet. Bunun Eclipse ile bir ilgisi yok. Örneğin, quickstarteserle bir Maven projesi oluşturursanız IntelliJ IDEA'da da aynı sorunu yaşarsınız .
Jan Hettich

Merhaba, sorunun kök nedenini gönderdiğiniz için teşekkür ederim :) Gerçekten takdir ediyorum!
IanGabes

6

JRE'niz muhtemelen çalıştırma yapılandırmasında tanımlanmıştır. Derleme JRE değiştirmek için Eclipse bu adımları izleyin.

1) Projeye sağ tıklayın ve Farklı Çalıştır > Yapılandırmaları Çalıştır'ı

2) Çalıştırma Yapılandırmaları penceresinden, sol panelde proje oluşturma yapılandırmanızı seçin. Sağda çeşitli sekmeler göreceksiniz: Ana, JRE, Yenile, Kaynak, ...

3) JRE sekmesine tıklayın, böyle bir şey görmelisiniz

resim açıklamasını buraya girin

4) Varsayılan olarak, Çalışma Varsayılanı JRE ( Tercihler-> Java-> Yüklü JRE'ler altında varsayılan olarak seçtiğiniz JRE ) kullanılır. Yüklü başka bir JRE kullanmak istiyorsanız, Alternatif JRE onay kutusunu işaretleyin ve açılır menüden tercih ettiğiniz JRE'yi seçin.


Bu cevap için teşekkürler, benim çalışma yapılandırması çalışma alanı varsayılan ile çalışıyordu, bu yüzden bu gerçekten yardımcı oldu!
Damir Ciganović-Janković

Bu yardımcı oldu, biz bu göz ardı inanamıyorum!
phil oO

3

Springboot'ta en basit çözüm

Springboot kullanırsanız size en basit olanı vereceğim:

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

Ardından, Eclipse projenize sağ tıklayın: Maven> Projeyi güncelle> pom.xml'den proje yapılandırmasını güncelle

Öyle olmalı.


2

Projeye özgü ayarlar

Bunun yanlış gidebileceği bir yer daha Eclipse'deki projeye özgü ayarlarda.

  1. proje özellikleri: projenizi ve aşağıdakilerden birini tıklayın:

    • Alt + Enter
    • Menü> Proje> Özellikler
    • projenizi sağ tıklayın> proje özellikleri (menüdeki son öğe)
  2. "Java Derleyici" ye tıklayın

  3. "Projeye özgü ayarları etkinleştir" seçeneğinin işaretini kaldırın (veya hepsini elle değiştirin).

Müşteri ihtiyaçları nedeniyle, projelerimizi 1.6'da tutmalarını sağladık. 1.7'ye yükseltmek gerektiğinde, zor zaman geçirdik çünkü java sürümünü her yerde değiştirmemiz gerekiyordu:

  • proje POM
  • Eclipse Çalışma Alanı varsayılanı
  • projeye özgü ayarlar
  • sanal makine yürütme (1.6 her şey için kullanıldı)

1

Paketleri oluşturmak için Tycho ve Maven kullanıyorsanız , tanımlanan Bundle-RequiredExecutionEnvironmentmanifest dosyasında ( manifest.mf) yanlış yürütme ortamına ( ) sahip olmanızın bir nedeni daha olabilir . Örneğin:

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

Benim durumumda her şey iyiydi. Derleyici eklentileri (normal maven ve tycho da) doğru şekilde ayarlandı, yine de manifest nedeniyle m2 eski uyum seviyesi üretti. Deneyimi paylaştığımı sanıyordum.


1

Benim sorunum biri varsayılan JRE olarak Java1.5 başvuruları vardı .project ve .classpath dosya taahhüt biri olduğunu bulundu.

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

Projeyi kapatarak, dosyaları kaldırarak ve bir Maven projesi olarak yeniden içe aktararak, projeyi 1.5'e geri dönmeden JRE veya ilgili jdk çalışma alanını kullanacak şekilde ayarlayabildim. Bu nedenle, SVN'nize .project ve .classpath dosyalarını kontrol etmekten kaçının

Umarım bu başkalarına yardımcı olur.


0

Eclipse'de yeni oluşturulan projelerin veya içe aktarılan projelerin Java 1.5'ten başka bir varsayılan java sürümünü kullandığından emin olmak istiyorsanız, maven-derleyici eklentisindeki yapılandırmayı değiştirebilirsiniz.

  • .M2 / repository / org / apache / maven / plugins / maven-compiler-plugin / 3.1 klasörüne gidin
  • Maven-compiler-plugin-3.1.jar dosyasını bir zip programıyla açın.
  • META-INF / maven adresine gidin ve plugin.xml dosyasını açın
  • Aşağıdaki satırlarda:
    <source application = "java.lang.String" default-value = "1.5"> $ {maven.compiler.source} </source>
    <target application = "java.lang.String" default-value = "1.5"> $ {maven.compiler.target} </ hedef>

  • varsayılan değeri 1,6 veya 1,8 veya istediğiniz gibi değiştirin.

  • Dosyayı kaydedin ve zip dosyasına geri yazıldığından emin olun.

Şu andan itibaren tüm yeni Maven projeleri belirttiğiniz java sürümünü kullanıyor.

Bilgiler aşağıdaki blog yayınından alınmıştır: https://sandocean.wordpress.com/2019/03/22/directly-generating-maven-projects-in-eclipse-with-java-version-newer-than-1-5/


0

JDK'nın sürümünü değiştirmek için şunları yapabilirsiniz:

1- Proje> Özellikler
2- Java Derleme Yoluna Git
3- Kütüphanelerde JRE Sistemi ... ' ni seçin ve Düzenle'ye tıklayın
4- Uygun sürümünüzü seçin ve doğrulayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.