हर बार पोम रीलोड होने पर (या डिफ़ॉल्ट प्रोजेक्ट लैंग्वेज लेवल को बदलने के लिए) IntelliJ IDEA को जावा लैवल लैंग्वेज पर रोकें


145

IntelliJ 12 का उपयोग करते हुए, मेरे पास एक जावा परियोजना है और मैं pom.xml के साथ मावेन का उपयोग करता हूं। मेरी परियोजना java8 का उपयोग कर रही है, लेकिन ऐसा लगता है कि परियोजना को आयात करते समय डिफ़ॉल्ट परियोजना भाषा का स्तर 6 पर सेट किया गया है।

मैं भाषा स्तर को 8.0 (F4 -> मॉड्यूल -> भाषा स्तर) में बदल सकता हूं, हालांकि हर बार जब मैं अपना pom.xml संपादित करता हूं तो प्रोजेक्ट स्तर "प्रोजेक्ट भाषा स्तर का उपयोग" करने के लिए वापस स्विच किया जाता है, और मुझे इस सेटिंग्स को फिर से संपादित करना होगा और फिर।

क्या मुझे डिफ़ॉल्ट भाषा स्तर को 8.0 पर सेट करने के लिए pom.xml में जोड़ने की आवश्यकता है?


2
क्या आपका पोम संकलक प्लगइन विन्यास में स्रोत और लक्ष्य स्तर निर्दिष्ट करता है?
मार्क रोटेटेवेल

हां, स्रोत और लक्ष्य 1.8 पर सेट। हालाँकि यह परियोजना आयात के दौरान निर्दिष्ट नहीं किया गया था
क्वेंटिन

@ क्वेंटिन ऐसी स्थिति में प्रोजेक्ट को नए स्थान पर फिर से बनाना और इंटेलीज को नए सिरे से आयात करने देना सबसे आसान हो सकता है।
थोरबजोरन राव एंडरसन

जवाबों:


174

मार्क की टिप्पणी के अनुसार, यह कैसे करना है:

<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
प्लगइन pom में मौजूद है, wuth 1.8 लक्ष्य, लेकिन यह कुछ भी नहीं बदलता है :(
Quentin

2
क्या आपने अपने मावेन पोम के ऑटो-आयात को सक्षम किया है? क्या आपने माता-पिता (और दादा-दादी) के पोम्स की जाँच की है, क्या कोई 1.6 सेटिंग्स हैं जो परस्पर विरोधी हो सकती हैं?
vikingsteve

1
वास्तव में मूल परियोजना को स्प्रिंग-बूट-स्टार्टर-पैरेंट-1.1.9.RELEASE.pom.xml के साथ परिभाषित किया गया है और pluginManagement में maven-compiler-plugin को 1.6 पर सेट किया गया है ... मैंने बिना किसी सफलता के इस सेटिंग्स को ओवरराइड करने का प्रयास किया। लगता है कि स्प्रिंग बूट 1.2.RC में अब मावेन-कंपाइलर-प्लगइन शामिल नहीं हैं, मैं इसे आज़माता हूँ। - ऑटो आयात सक्षम है।
क्वेंटिन

महान, यही कारण हो सकता है। यदि आप मावेन कंपाइलर प्लगइन का एक ही संस्करण निर्दिष्ट करते हैं, तो स्रोत / लक्ष्य सेटिंग्स को ओवरराइड करना संभव हो सकता है। शायद कोशिश करें कि आपकी परियोजना में रूट pom.xml।
11

2
मेरे मामले में यह काम नहीं किया। मुझे इस उत्तर में बताई गई सेटिंग को हटाना था और इसके बजाय निम्नलिखित जोड़ना था:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
१ '

99

वाइकिंगस्टेव के उत्तर का एक छोटा संस्करण है:

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

6
एक झुंझलाहट कम!
आर्टूर किकोसॉज़

4
यह केवल एक छोटा संस्करण नहीं था, लेकिन मेरे मामले में एक आवश्यक था। वाइकिंगस्टेव का जवाब मेरे काम नहीं आया। इसलिए मैंने उस सेटिंग को हटा दिया और इस का उपयोग किया।
19

23

मुझे लगता है कि यह मावेन कंपाइलर प्लगइन और इंटेलीज विचार के बीच एक वैचारिक संघर्ष के साथ करना है। जाहिरा तौर पर संकलक प्लगइन के नए संस्करणों का डिफ़ॉल्ट स्तर 1.5 है (देखें http://maven.apache.org/plugins/maven-compiler-plugin/ )। इसलिए यदि कंपाइलर प्लगइन का उपयोग किसी प्रोजेक्ट में किया जाता है, और कंपाइलर स्तर pom.xml में स्पष्ट रूप से सेट नहीं होता है, जब भी POM को फिर से संसाधित किया जाता है तो स्तर डिफ़ॉल्ट पर वापस आ जाएगा।

तो एक वैचारिक संघर्ष है जिसे Intellij IDEA द्वारा अनदेखा किया गया है। IDE अभी भी प्रोजेक्ट और मॉड्यूल सेटिंग्स को सेट करने की अनुमति देता है, लेकिन कोई चेतावनी या प्रतिक्रिया नहीं देता है कि यह सेटिंग pom.xml द्वारा नियंत्रित है। समाधान या तो स्पष्ट रूप से पीओएम संकलक प्लगइन सेटिंग को ओवरराइड करने की अनुमति देगा (शायद बुद्धिमान नहीं है क्योंकि तब तब क्या होता है जब आप कमांड लाइन पर मावेन का उपयोग करते हैं), या आईडीई में नियंत्रणों को निष्क्रिय करने के लिए जब पीओएम से यह सेटिंग प्रभावी होती है।

वर्तमान समय में समाधान मॉड्यूल सेटिंग्स में इसे सेट करने की कोशिश करने के बजाय, पोम में संकलक प्लगइन में वांछित संकलक स्तर सेट करना है।


1
माना। फीडबैक की कमी कि आईडीईए में सेटिंग्स को केवल नजरअंदाज किया जाता है और पीओएम से फिर से आयात किया जाता है, विशेष रूप से एक माता-पिता पीओएम का उपयोग करते समय बहुत भ्रमित होता है।
गिलफिश

9

मैं एक परियोजना को JDK 8 से JDK 10+ में अपग्रेड कर रहा हूं। मेरे पास संकलक गुण सही प्रकार से निर्दिष्ट थे:

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

हालाँकि आइडिया प्रोजेक्ट भाषा स्तर को 8 पर रीसेट करता रहेगा।

आखिरकार मुझे पता चला कि आइडिया की मावेन आयात प्रक्रिया परियोजना को आयात करने के लिए जेडडीके 8 का उपयोग कर रही थी, जो भाषा स्तर को <= 8 तक सीमित कर रहा था।

तय करने के लिए मैंने सेटिंग्स के तहत 'आयातक के लिए जेडीके' संपत्ति को अद्यतन किया -> बिल्ड, निष्पादन, तैनाती -> उपकरण बनाएँ -> मावेन -> जेडडीके 11 का उपयोग करने के लिए आयात करना।

यहाँ छवि विवरण दर्ज करें


मेरा मसला हल कर दिया। इंटेलीज जैसे लगता है कि बाद के रिलीज (2019.2 के आसपास) के साथ अपने आंतरिक जेआरई को अपडेट किया। नीचे ट्रैक करने के लिए बहुत कठिन ...
हसन असलम

8

ऐसा करने के दो तरीके हैं, उनमें से किसी एक को अपनी pom.xml फ़ाइल में जोड़ें:

पहला- गुण जोड़ें

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

दूसरा- प्लगइन जोड़ें

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

मुझे बताएं कि क्या इससे लाभ होता है।


मैंने इन दोनों को किया है और कंपाइलर अभी भी 1.5 पर रीसेट किया जा रहा है जब भी मैं IntelliJ के भीतर से mvan कंपाइल चलाने की कोशिश करता हूं। हालाँकि, यह ठीक काम करता है जब IntelliJ के बाहर कमांड लाइन से चलाया जाता है।
user26270

1
IntelliJ में, संशोधन के बाद मावेन सेटिंग्स को फिर से आयात करना याद रखें। समाधान ने मेरे लिए काम किया।
पियरलुइगी वर्नेट्टो

4

मेरे मामले में किसी भी समाधान ने मदद नहीं की। मुझे अपने में कोई जावा संस्करण निर्दिष्ट करने की आवश्यकता नहीं थी pom.xml

मुझे <project-name>.imlफ़ाइल खोलने और वहां JDK संस्करण बदलने की आवश्यकता थी ।

मूल:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

अपडेट किया गया:

<?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">
    <!-- ...                                                   ^ -->
    <!-- ...                                                   | -->

यह बिलकुल अर्थहीन प्रतीत होता है। किसी भी बिंदु पर मैंने जावा 1.5 के लिए एक जेडीके संस्करण निर्दिष्ट नहीं किया है।


यह, मेरे द्वारा, IntelliJ 2019.3 में मेरे लिए इस मुद्दे को सुलझाया गया, बिना इस बात की आवश्यकता के कि मैं अपने पोम या कहीं और कुछ भी बदलता हूं। मैंने जेडीके 1.5 को कहीं भी निर्दिष्ट नहीं किया।
माइकल क्रिस्टोफ

उदाहरण: <... LANGUAGE_LEVEL = "JDK_11">
डैनियल डी लियोन

1

Dropwizard के साथ microservices बनाने के कारण मैंने इस समस्या से बहुत संघर्ष किया। आखिरकार मुझे पता चला कि मेरे पास गलत पोम फाइल (मुख्य सेवा की pom.xml) में मेरी बिल्ड प्रॉपर्टीज थीं ।

इसलिए, भले ही अन्य पैकेज पुस्तकालयों की तरह अधिक हैं , मैं जावा 8 सिंटैक्स का उपयोग करने में सक्षम नहीं था।

जब मैंने बिल्ड प्लगइन को "वैश्विक .pom.xml" फ़ाइल में बदल दिया, तो सभी बाल कंटेनर नए वाक्यविन्यास का उपयोग करने में सक्षम थे।

बहु-कंटेनर परियोजनाओं के साथ समस्या वाले किसी व्यक्ति की मदद कर सकते हैं


0

मेरे लिए आवश्यक जावा कंपाइलर संस्करण (मेरे मामले में 1_7) पोम (प्लगइन्स प्लस गुण) को अपडेट करने का समाधान काम कर गया। हालाँकि, प्रत्येक प्रोजेक्ट के लिए .iml फ़ाइल को मूल pom (1_5 के डिफ़ॉल्ट संकलक संस्करण के साथ उत्पन्न किया गया था जैसा कि ऊपर किसी के द्वारा समझाया गया है) में 1_5 का JDK संस्करण है, यह अभी भी pom संस्करण को ओवरराइड करता है।

मैंने .idea फ़ोल्डर को मैन्युअल रूप से डिलीट कर दिया और अपडेट किए गए पोम से रिइम्पोर्ट के साथ मॉड्यूल को IntelliJ में आयात किया। जब मैंने अपडेट किए गए POM से मॉड्यूल को पुनः प्राप्त किया, तो मैं देख सकता था कि iml फाइलों में अपडेटेड JDK संस्करण (मेरे मामले में 1_7) था।


0

मावेन बिल्ड प्रॉपर्टीज़ को सेट करने के अलावा , मावेन -कंपाइलर-प्लगइन को जोड़ने , और .iml फ़ाइल में जावा संस्करण को संशोधित करने के अलावा एक और अतिरिक्त कदम था । (प्रत्येक अन्य उत्तर में पहले से ही प्रलेखित है)। आपको सेटिंग में संकलक संस्करण भी सेट करना होगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.