pom yeniden yüklendiğinde IntelliJ IDEA'nın java dil seviyesini değiştirmesini durdurun (veya varsayılan proje dil seviyesini değiştirin)


145

IntelliJ 12 kullanarak bir java projem var ve pom.xml ile maven kullanıyorum. Projem java8 kullanıyor, ancak proje içe aktarılırken varsayılan proje dil düzeyi 6 olarak ayarlanmış gibi görünüyor.

Dil seviyesini 8.0 (F4 -> Modüller -> Dil seviyesi) olarak değiştirebilirim ancak pom.xml'imi her düzenlediğimde proje seviyesi tekrar "proje dil seviyesini kullan" a geçer ve bu ayarları tekrar düzenlemem gerekir ve tekrar.

Varsayılan dil seviyesini 8.0 olarak ayarlamak için pom.xml dosyasına eklemem gereken bir şey var mı?


2
Pom'nız, derleyici eklentisi yapılandırmasında kaynak ve hedef seviyeyi belirliyor mu?
Mark Rotteveel

Evet, kaynak ve hedef 1.8 olarak ayarlandı. Ancak proje ithalatı sırasında belirtilmedi
Quentin

@Quentin Böyle bir durumda, projeyi yeni bir yerde yeniden yapılandırmak ve IntelliJ'in bunu yeniden almasına izin vermek en kolay yol olabilir.
Thorbjørn Ravn Andersen

Yanıtlar:


174

Mark'ın yorumuna göre, bunu nasıl yapacağınız aşağıda açıklanmıştır:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

10
eklenti, 1.8 hedef wuth pom mevcut, ama hiçbir şey değişmez :(
Quentin

2
Maven pom'unuzun otomatik olarak içe aktarılması etkinleştirildi mi? Ebeveyn (ve büyükbaba veya büyükanne) pomlarını kontrol ettiniz mi, orada çelişkili olabilecek 1,6 ayar var mı?
Kasım'da

1
Aslında, ana proje spring-boot-starter-parent-1.1.9 ile tanımlanır. Spring boot 1.2.RC artık maven-compiler-plugin içermiyor gibi görünüyor, ben bir deneyeceğim. - otomatik içe aktarma etkin.
Quentin

Harika, bu yüzden olabilir. Aynı maven derleyici eklentisinin sürümünü belirtirseniz, kaynak / hedef ayarlarını geçersiz kılabilir. Belki de proje kök pom.xml'de deneyin.
14'te

2
Benim durumumda bu işe yaramadı. Bu cevapta belirtilen ayarı kaldırmak ve bunun yerine aşağıdakileri eklemek zorunda <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
kaldım

99

Vikingsteve'nin cevabının daha kısa bir versiyonu:

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

6
Bir sıkıntı daha az!
Artur Cichosz

4
Bu sadece kısa bir versiyon değil, benim durumumda gerekli bir versiyondu. Vikingsteve'nin cevabı benim için işe yaramadı. Bu ayarı kaldırdım ve kullandım.
anonim

23

Bunun Maven derleyici eklentisi ile IntelliJ fikri arasındaki kavramsal çatışma ile ilgili olduğunu düşünüyorum. Görünüşe göre derleyici eklentisinin daha yeni sürümleri varsayılan 1.5 seviyesine sahiptir (bkz. Http://maven.apache.org/plugins/maven-compiler-plugin/ ). Derleyici eklentisi bir projede hiç kullanılmıyorsa ve derleyici düzeyi pom.xml dosyasında açıkça ayarlanmazsa, POM yeniden işlendiğinde düzey varsayılana geri döner.

Dolayısıyla Intellij IDEA tarafından göz ardı edilen kavramsal bir çatışma var. IDE hala bir kişinin proje ve modül ayarlarını yapmasına izin verir, ancak bu ayarın pom.xml tarafından kontrol edildiğine dair hiçbir uyarı veya geri bildirim sağlamaz. Çözümler, ya açık bir şekilde POM derleyici eklenti ayarının geçersiz kılınmasına izin vermek (belki de akıllıca değildir, çünkü komut satırında maven kullandığınızda ne olacağı nedeniyle) ya da POM'dan bu ayar etkin olduğunda IDE'deki denetimleri devre dışı bırakmak olacaktır.

Şu anda çözüm, modül ayarlarında ayarlamaya çalışmak yerine, pom'daki derleyici eklentisinde istenen derleyici düzeyini ayarlamak, yeniden içe aktarmaktır.


1
Kabul. IDEA'daki ayarların göz ardı edileceği ve POM'dan yeniden içe aktarılacağı konusunda geri bildirim eksikliği, özellikle bir ana POM kullanılırken çok kafa karıştırıcıdır.
Gillfish

9

Bir projeyi JDK 8'den JDK 10+ 'ya yükseltiyorum. Derleyici özellikleri aşağıdaki gibi doğru belirtildi:

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

Ancak Fikir projesi dil seviyesini 8'e sıfırlamaya devam edecek.

Sonunda, Idea'nın Maven içe aktarma işleminin JDK 8'i kullanarak dil seviyesini <= 8 ile sınırlayan projeyi içe aktardığını anladım.

Düzeltmek için Ayarlar -> Derleme, Yürütme, Dağıtım -> Derleme Araçları -> Maven -> JDK 11 kullanmak için içe aktarma altındaki 'İthalatçı için JDK' özelliğini güncelledim.

resim açıklamasını buraya girin


Sorunum çözüldü. IntelliJ, dahili JRE'lerini daha sonraki sürümlerle (2019'da bir yerde) güncelledi gibi görünüyor. İzlemek oldukça zor ...
Hasan Aslam

8

Bunu yapmanın iki yolu vardır, pom.xml dosyanıza bunlardan birini ekleyin:

İlk- Özellik Ekle

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

second- Eklenti Ekle

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
</plugin>

Yardımcı olursa haberim olsun.


Bunların her ikisini de yaptım ve IntelliJ içinden mvn derlemesini çalıştırmaya çalıştığımda derleyici hala 1.5'e sıfırlanıyor. Ancak, IntelliJ dışındaki komut satırından çalıştırıldığında iyi çalışır.
user26270

1
IntelliJ'de, değişiklikten sonra maven ayarlarını tekrar almayı unutmayın. Çözüm benim için çalıştı.
Pierluigi Vernetto

4

Benim çözümümden hiçbiri yardımcı olmadı. Herhangi bir Java sürümü belirtmem gerekmedi pom.xml.

<project-name>.imlDosyayı açmam ve orada JDK sürümünü değiştirmem gerekiyordu .

Orijinal:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Güncellenmiş:

<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

Bu hiçbir şekilde anlam ifade etmiyor. Hiçbir noktada Java 1.5 için bir JDK sürümü belirtmedim.


Bu, IntelliJ 2019.3'te benim için, pom'larımda veya başka bir yerde bir şey değiştirmeme gerek kalmadan sorunu çözdü. Benzer şekilde hiçbir yerde JDK 1.5 belirtmedim.
Michael Christoff

Örnek: <... LANGUAGE_LEVEL = "JDK_11">
Daniel De León

1

Dropwizard ile mikro hizmetlerin oluşturulması nedeniyle bu sorunla çok uğraştım. Sonunda ben inşa özellikleri yanlış pom dosyasında (ana hizmet pom.xml) olduğunu öğrendim .

Yani, diğer paketler daha çok kütüphaneye benzese de , Java 8 sözdizimini kullanamadım.

Yapı eklentisini "global" .pom.xml"dosyasına yeniden düzenlediğimde , tüm alt kapsayıcılar yeni sözdizimini kullanabiliyordu.

Çok konteynerli projelerde sorun yaşayan birine yardımcı olabilir


0

Benim için POM (eklentiler artı özellikler) gerekli Java derleyici sürümüne (benim durumumda 1_7) güncelleme çözümü çalıştı. Ancak, her bir proje için .iml dosyası orijinal pom ile oluşturulduğundan (yukarıdaki biri tarafından açıklandığı gibi varsayılan 1_5 derleyici sürümü ile) 1_5 JDK sürümüne sahip olduğundan, bu hala pom sürümünü geçersiz kılar.

.İdea klasörünü el ile sildim ve modülü güncellenmiş pom'dan bir reimport ile IntelliJ'e aktardım. Modülü güncellenmiş POM'dan yeniden taşıdığımda, iml dosyalarının güncellenmiş JDK sürümüne sahip olduğunu görebiliyordum (benim durumumda 1_7).


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.