जावा 7 कोड को मावेन के माध्यम से संकलित करना


155

मेरी pom फ़ाइल सूची

<project>
  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  ...

हालाँकि mvn clean install, मुझे मिलता है

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid target release: 1.7
Usage: javac <options> <source files>

/usr/bin/java -versionहै ( which javaअंक यहाँ)

java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

javac यह भी सही जावा संस्करण को इंगित करता है

/usr/bin/javac -> /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/bin/javac

इस मशीन पर, मैं उपयोग कर रहा हूँ zsh( echo $0रिटर्न -zsh)

मेरे में .zshrc, मैंने परिभाषित किया है:

 33 # HOME
 34 JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home
 35 SCALA_HOME=/Library/Scala/current
 36 FORGE_HOME=~/tools/forge/
 37 
 38 # PATH
 39 PATH="/Library/Frameworks/Python.framework/Versions/3.2/bin:${PATH}"
 40 PATH=${PATH}:${JAVA_HOME}/bin
 41 PATH=${PATH}:/bin/
 42 PATH=${PATH}:/sbin/
 43 PATH=${PATH}:/usr/bin/
 44 PATH=${PATH}:/usr/sbin/
 45 PATH=${PATH}:/opt/local/bin/
 46 PATH=${PATH}:/opt/local/sbin/
 47 PATH=${PATH}:/usr/local/git/bin
 48 PATH=${PATH}:/usr/local/git/sbin
 49 PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/usr/bin
 50 PATH=${PATH}:${SCALA_HOME}/bin
 51 PATH=${PATH}:${FORGE_HOME}/bin
 52 
 53 export PATH

जब मैं दौड़ mvn clean install --debugरहा होता हूं तो देखता हूं कि वास्तव में मैं जावा 6 का उपयोग करता हूं

  1 Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
  2 Maven home: /usr/share/maven
  3 Java version: 1.6.0_35, vendor: Apple Inc.
  4 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

इसे कहां परिभाषित किया जा सकता है? मेरे पास (d) मेरे .zshrc कई बार हैं।


2
आपके PATH /usr/binमें निर्देशिका की सूची में यह पहले नहीं है । javac -versionनिर्देशिका निर्दिष्ट किए बिना प्रयास करें ।
पीटर लॉरी

@PeterLawrey, मुझे मिलाjavac 1.7.0_10
जेम्स रत्सेव

2
क्या echo $JAVA_HOMEबताता है?
एंड्रयू लोगविनोव

2
आपके JAVA_HOME चर के बारे में क्या? mvan JAVA_HOME का उपयोग करेगा। इसके अलावा, क्या आप कमांड लाइन या आईडीई के अंदर से निर्माण कर रहे हैं?
लुकास

8
यदि आप मावेन के साथ चलाते हैं --debug, तो यह आपको सटीक कमांड लाइन बताएगा जो इसे चलाने के लिए उपयोग कर रहा है javac(अन्य सामान के टन के साथ)। यह क्या कहता है?
एमिल सीट

जवाबों:


153

चेक mvnअपने Maven स्थापना में स्क्रिप्ट है कि यह कैसे आदेश के निर्माण को देखने के लिए। शायद आप या किसी और ने JAVA_HOMEवहां एक हार्ड-कोड किया है और इसके बारे में भूल गए हैं।


8
आप सर विजेता हैं। वास्तव में किसी ने स्क्रिप्ट के अंदर JAVA_HOME हार्डकोड किया! धन्यवाद
जेम्स रत्सेव

21
हेह, ऐसा नहीं है कि मैंने कभी भी खुद से पहले या कुछ भी किया है ... :)
रयान स्टीवर्ट

4
mvnस्क्रिप्ट Oracle की JDK 7 की मेरी OSX स्थापना के साथ संगत नहीं था, और मैं कुछ भी कल्पना इसे (एक फ़ोल्डर के लिए सेटिंग स्क्रिप्ट दिखता भी नहीं किया Library/Java/JavaVirtualMachines/CurrentJDKजो मेरे लिए मौजूद नहीं था (क्या किया अस्तित्व है jdk1.7.0_25.jdkके बजाय CurrentJDK)। नहीं एक सुरुचिपूर्ण तय है, लेकिन मैंने अभी निर्यात को हार्डकोड किया है और अब यह काम करता है (PS: OSX पर maven है /usr/share/maven/bin/mvn)
Raekye

6
OSX 1.9.2 मावेरिक्स, होमब्रे के माध्यम से /usr/local/bin/mvn
मावेन के साथ, मावन

1
मेरे पास एक JAVA_HOME सेट था और इसने सुराग दिया। धन्यवाद!! : डी
अल्फोंसो निशिकवा

109

मावेन कंपाइलर प्लगइन के नए संस्करण का उपयोग करने का प्रयास करें:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>

इसके अलावा, स्रोत फ़ाइल एन्कोडिंग को मावेन में निर्दिष्ट करना विश्व स्तर पर बेहतर है:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

संपादित करें : जैसा कि इस उत्तर पर अभी भी ध्यान दिया जा रहा है कि मैं केवल यह बताना चाहूंगा कि नवीनतम मान (नवीनतम संपादन के अनुसार) मावेन कंपाइलर प्लगइन के लिए 3.2 और जावा के लिए 1.8 हैं, क्योंकि मावेन के माध्यम से जावा 8 कोड को संकलित करने के बारे में प्रश्न बाध्य हैं। जल्द ही दिखाई देंगे :-)


"<संस्करण> 3.0 </ संस्करण>" जोड़कर समस्या को ठीक किया गया।
श्रीराम

@ ब्रैडाई, इसकी 3.2 अब, लेकिन अद्यतन रखने के लिए मूर्खतापूर्ण है क्योंकि यह कभी भी बढ़ाना बंद नहीं करेगा ...
लुकास

@ लुकास - न केवल पुराने संस्करणों से चिपके लोगों के लिए जिम्मेदार होना चाहता है, यह सब है। अपने साथ नहीं रह सकता :-)
राडाई 8

जब इस प्रश्न का सही हल नहीं होता है, तो इसका उत्तर लगभग एक सौ तक क्यों होता है? मैं हार गया ...
जीरो 3

48

मुझे भी यही समस्या थी और इसे हल करने के लिए मैं इस ब्लॉग लेख का अनुसरण करता हूँ: http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/

$ vim .bash_profile 

export JAVA_HOME=$(/usr/libexec/java_home)

$ source .bash_profile

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

@mkyong को विशेष टीके

संपादित करें: अब मैं उपयोग कर रहा हूँ: jEnv + sdkman


3
इसने मेरे लिए काम किया। मैं एक मैक का उपयोग कर रहा हूँ, macports और सूरज की जद से maven के साथ। जाहिर है कि कॉम्बो मुश्किल था।
क्वांटम 7

1
अच्छा कार्य। सभी कमांड के लिए धन्यवाद! पर Maveriks अब काम करता है
Maksim

1
यह सबसे आसान और सबसे सुंदर समाधान है। धन्यवाद!
BK-

26

कृपया नीचे दिए गए टैग के लिए pom.xml की जाँच करें

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

यह आवश्यक jdk संस्करण को इंगित करना चाहिए


19

आपको मावेन संस्करण की जांच करनी होगी:

mvn -version

आपको जावा संस्करण मिलेगा जो संकलन के लिए मावेन का उपयोग करता है। जरूरत पड़ने पर आपको JAVA_HOME रीसेट करना पड़ सकता है।


19

मुझे भी यही समस्या थी। मैंने पाया कि ऐसा इसलिए है क्योंकि मावेन स्क्रिप्ट नीचे CurrentJDK लिंक को देखती है और 1.6 JDK ढूंढती है। भले ही आप नवीनतम JDK स्थापित करें यह हल नहीं है। जब आप सिर्फ JAVA_HOME को अपने $ HOME / .bash_profile स्क्रिप्ट में सेट कर सकते हैं, तो मैंने इसके बजाय प्रतीकात्मक लिंक को ठीक करने के लिए चुना:

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 30 Oct 16:18 1.6.0 -> CurrentJDK
drwxr-xr-x  9 root  wheel  306 11 Nov 21:20 A
lrwxr-xr-x  1 root  wheel    1 30 Oct 16:18 Current -> A
lrwxr-xr-x  1 root  wheel   59 30 Oct 16:18 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

ध्यान दें कि करंटजैक 1.6.0.jdk पर इंगित करता है

इसे ठीक करने के लिए मैंने निम्नलिखित कमांड चलाए (आपको अपने इंस्टॉल किए गए संस्करण की जांच करनी चाहिए और उसी के अनुसार अनुकूलित करना चाहिए)।

sudo rm /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/ /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

अगर mvan क्लीन इंस्टाल -debug java 1.6 दिखाता है तो यह सही उत्तर है
cetnar

4

निदान:

आप देख सकते हैं कि "mvan --version" को चलाकर जावा संस्करण किस मावेन का उपयोग करता है

डेबियन के लिए समाधान:

Mvan स्क्रिप्ट JAVA_HOME env वैरिएबल को आंतरिक रूप से javac (जो javac) की तलाश में सेट करती है। इसलिए, यदि आपके पास एकाधिक जावा संस्करण समवर्ती रूप से स्थापित हैं, जैसे JDK 6 और JDK 7 और उनके बीच चयन करने के लिए डेबियन अल्टरनेटिव सिस्टम का उपयोग करें, भले ही आपने "java" के विकल्प को JDK 7 में बदल दिया हो, mvn अभी भी JDK 6 का उपयोग करेगा। आप "javac" के विकल्प को भी बदलना होगा। उदाहरण के लिए:

# update-alternatives --set javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac

संपादित करें:

वास्तव में, एक बेहतर समाधान अपडेट-जावा-विकल्प (उदाहरण के लिए) का उपयोग करना है

# update-java-alternatives -s java-1.7.0-openjdk-amd64

जैसा कि https://wiki.debian.org/JavaPackage में विस्तृत है , क्योंकि यह विभिन्न जावा टूल (एक दर्जन या तो) के सभी विकल्पों को बदल देगा ।


धन्यवाद, बस मैं क्या देख रहा था
१२:०४ पर

धन्यवाद, मैं के साथ जावा संस्करण की स्थापना के बाद उलझन में था: अद्यतन-विकल्प --config javac
लियोनार्ड सेर्स

2

क्या आप एक नया प्लगइन आज़मा सकते हैं; मावेन साइट पर:

<version>3.0</version>

मैंने निम्नलिखित को भी देखा:

<compilerVersion>1.7</compilerVersion>

काम नहीं करता। [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project divs: Fatal error compiling: invalid target release: 1.7 -
जेम्स रत्सेव

मैंने सफलतापूर्वक 1.7 से पहले संकलन करने के लिए 2.3.2 का उपयोग किया है ... लेकिन यदि संभव हो तो नवीनतम का उपयोग करने के लिए हमेशा अच्छा।
लुकास

आगे खोजा गया। अपने निर्भरता प्लगइन प्रबंधन की जाँच करें यदि आप इसका उपयोग करते हैं।
जोप एगेन

जोड़ा गया <प्लगइनडिपेंडेंसी>, एक ही मुद्दा
16:16 पर जेम्स रत्सेव

यदि यह एक मॉड्यूल परियोजना है, तो मूल परियोजना देखने लायक हो सकती है। यहाँ ऐसा नहीं हो सकता। मावेन जावा 1.7 के साथ चल रहा है?
जोप एगेन

2

ग्रहण में गुणों में जावा संकलक सेटिंग्स को बदलने की कोशिश करें-

गोटो: वरीयताएँ-> जावा-> संकलक-> संकलक अनुपालन स्तर-> 1.7 लागू करें ठीक है

IDE को पुनरारंभ करें।

प्रोजेक्ट के लिए कंपाइलर सेटिंग की पुष्टि करें- गोटो: प्रोजेक्ट गुण-> जावा कम्पाइलर- अनचेक (जावा बिल्ड पथ पर निष्पादन पर्यावरण 'JavaSE-1.6 से अनुपालन का उपयोग करें।) और ड्रॉपडाउन से 1.7 का चयन करें। (पहले से ही 1.7 पर ध्यान न दें)

IDE को पुनरारंभ करें।

यदि फिर भी समस्या बनी रहती है, तो टर्मिनल में कमांड का उपयोग करके व्यक्तिगत परीक्षण मामलों को चलाएं-

mvn -Dtest=<test class name> test

2

यकीन नहीं है कि ओएस यहां क्या उपयोग में है, लेकिन आप डिफ़ॉल्ट जावा-सिस्टम को सेट करने के लिए अपडेट-जावा-विकल्प के साथ जावा संस्करण फ्यूजन अन-डेबिन / यूबुंटू को समाप्त कर सकते हैं।

#> update-java-alternatives -l
java-1.6.0-openjdk-amd64 1061 /usr/lib/jvm/java-1.6.0-openjdk-amd64
java-1.7.0-openjdk-amd64 1071 /usr/lib/jvm/java-1.7.0-openjdk-amd64
java-6-sun 63 /usr/lib/jvm/java-6-sun
java-7-oracle 1073 /usr/lib/jvm/java-7-oracle

नया सेट करने के लिए, उपयोग करें:

#> update-java-alternatives -s java-7-oracle

अधिकांश ऐप्स के लिए JAVA_HOME सेट करने की आवश्यकता नहीं है।


2

ग्रहण में उर परियोजना पर राइट क्लिक करें और "रन कॉन्फ़िगरेशन" खोलें .. वहां jre संस्करण देखें। बिल्डपाथ में संस्करण बदलने के बाद भी कुछ बार यह डिफ़ॉल्ट रूप से ग्रहण में नहीं बदलेगा।


2

एक विशिष्ट संकलन के लिए /etc/alternatives/javaजेवीएम (गैर-डिफ़ॉल्ट ) की आवश्यकता होती है , इस तरह से mvnकमांड को उपसर्ग करने पर विचार JAVA_HOMEकरें,

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ mvn package

यहां हम मान लेते हैं कि डिफ़ॉल्ट जावा 8 है, जबकि विशिष्ट परियोजना के लिए हमें जावा 7 की आवश्यकता है।


इसने मेरे लिए सबसे अच्छा काम किया है क्योंकि जीआईटी (या एससीएम) से डाउनलोड किए गए
प्रोजेक्ट

यह उत्तर अधिक उत्थान के योग्य है। इसने मुझे मेरी मशीन पर जावा 7 की आवश्यकता वाले कोड को संकलित करने में मदद की, जहां डिफ़ॉल्ट जावा 8 था - जावा 7 और जावा 8 को स्थापित करने और फिर से स्थापित करने के बिना
R11G

1

{JAVA_1_4_HOME} / बिन / javacyou भी कोशिश कर सकते हैं ...

<plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>{JAVA_HOME_1_7}/bin/javac</executable>
                <fork>true</fork>
        </configuration>
    </plugin>

4
आपको किसी भी कोड पर पथ को हार्डकोड नहीं करना चाहिए जो कभी भी साझा किया जाएगा।
Jan Segre

@ जान सेग्रे, ठीक है मैं इसे बदल देता
हूं

0

ठीक है, मैं सिर्फ अपने दम पर इस मुद्दे को हल किया। यह आपके JAVA_HOME से अधिक महत्वपूर्ण है, यदि आपके पास मावेन प्लगइन के स्रोत / लक्ष्य गुणों की तुलना में कम या कोई संस्करण नहीं है, तो आपको यह त्रुटि मिलेगी।

अपने JAVA_HOME में एक अच्छा संस्करण रखना सुनिश्चित करें और इसे अपने PATH में शामिल करें।


0

आप जावा के गलत संस्करण को निर्दिष्ट कर रहे होंगे। java -version (अपने टर्मिनल में) java के उस संस्करण की जाँच करने के लिए जिसका आप उपयोग कर रहे हैं। नवीनतम मावेन कंपाइलर संस्करण के लिए मावेन-कम्पाइल-प्लगइन पर जाएं आपका प्लगइन इस तरह दिखाई दे सकता है यदि आप जावा 6 का उपयोग कर रहे हैं और मावेन कंपाइलर प्लगइन का नवीनतम संस्करण 3.1 है

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

0

पिछले उत्तरों में से किसी ने भी मेरे उपयोग के मामले को पूरी तरह से हल नहीं किया है।

जो निर्देशिका बन रही थी, उसे हटाने की जरूरत है। स्वच्छ। और फिर पुनः स्थापित करें। एक मूक अनुमति समस्या की तरह दिखता है।


0

IntelliJ IDEA 14 में मुझे यह समस्या थी, जब तक मैं फ़ाइल मेनू में नहीं गया -> प्रोजेक्ट स्ट्रक्चर, प्रोजेक्ट SDK को 1.7 और प्रोजेक्ट लैंग्वेज लेवल को 7 में बदल दिया।


0

ग्रहण के साथ काम करते समय मुझे यह समस्या थी, मुझे प्रोजेक्ट के निर्माण पथ को बदलना पड़ा ताकि यह जेआर 7 को संदर्भित करे

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