মাভেনের মাধ্যমে জাভা 7 কোড সংকলন করা হচ্ছে


155

আমার পম ফাইল তালিকা

<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

কোথায় এটি সংজ্ঞায়িত করা যেতে পারে? আমার একাধিকবার সোর্স (ডি) রয়েছে।


2
আপনার PATH /usr/binডিরেক্টরিতে এটির তালিকা নেই। javac -versionডিরেক্টরি উল্লেখ না করে চেষ্টা করুন ।
পিটার লরি

@ পিটারলাউরে, আমি পেয়েছিjavac 1.7.0_10
জেমস রাইতসেভ

2
কি echo $JAVA_HOMEবলে?
অ্যান্ড্রু লগভিনভ

2
আপনার জাভাআহোম চলক সম্পর্কে কী? এমভিএন জেভিএহোম ব্যবহার করবে। এছাড়াও, আপনি কমান্ড লাইন থেকে বা আইডিই এর ভিতরে তৈরি করছেন?
লুকাস

8
আপনি যদি মাভেন দিয়ে চালনা করেন তবে এটি আপনাকে চালানোর জন্য --debugযে সঠিক কমান্ড লাইনটি ব্যবহার করছে তা বলতে হবে javac(অন্যান্য টন সহ অন্যান্য জিনিস)। এটা কি বলে?
এমিল সিট

উত্তর:


153

mvnকমান্ডটি কীভাবে এটি তৈরি করছে তা দেখতে আপনার মেভেন ইনস্টলেশনতে স্ক্রিপ্টটি পরীক্ষা করুন । সম্ভবত আপনি বা অন্য কেউ JAVA_HOMEসেখানে একটি হার্ড কোড কোড করেছেন এবং এটি ভুলে গেছেন।


8
আপনি স্যার বিজয়ী হয়। আসলেই কেউ স্ক্রিপ্টের ভিতরে জাভা_হোমকে হার্ডকোড করেছে! আপনাকে ধন্যবাদ
জেমস রাইতসেভ

21
হ্যাঁ, আমি এর আগে বা অন্য কিছু আগে কখনও করেছি তা নয় ... :)
রায়ান স্টুয়ার্ট

4
mvnস্ক্রিপ্ট ওরাকল এর JDK 7 আমার ওএসএক্স ইনস্টলেশন সঙ্গে সামঞ্জস্যপূর্ণ ছিল না এবং আমি কিছুই অভিনব এটি আপ (ক ফোল্ডারের জন্য সেটিং স্ক্রিপ্ট সৌন্দর্য করিনি Library/Java/JavaVirtualMachines/CurrentJDKযা আমার জন্য উপস্থিত করেনি (কি থাকবেই হয় jdk1.7.0_25.jdkপরিবর্তে CurrentJDK)। না একটি মার্জিত ফিক্স তবে আমি কেবল রফতানিটিকে হার্ডকোড করেছি এবং এখন এটি কাজ করে (পিএস: /usr/share/maven/bin/mvn
ওএসএক্সে মেভেন রয়েছে

6
ওএসএক্স 1.9.2 ম্যাভেরিকস, হোমব্রিউয়ের মাধ্যমে মাভেনের সাথে ইনস্টল করা, এমভিএন স্ক্রিপ্টটি ছিল/usr/local/bin/mvn
স্ট্যাক এক্সচেঞ্জ হোয়াট দ্য হেক

1
আমার একটি জাভাবাহোম সেট ছিল এবং এটি ক্লু দিয়েছে। ধন্যবাদ !! : ডি
আলফোনসো নিশিকাওয়া

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 কোড সংকলনের প্রশ্নগুলি আবদ্ধ শীঘ্রই উপস্থিত :-)


"<version> 3.0 </version>" যুক্ত করা সমস্যার সমাধান করেছে।
শ্রীরাম

@radai, এখন এটির 3.2, তবে আপডেট করা অবিরত কারণ এটি কখনই বাড়তে থাকবে না ...
লুকাস

@ লুকাস - পুরানো সংস্করণগুলিতে লেগে থাকা লোকের জন্য দায়ী হতে চান না, সবই। আমার সাথে বেঁচে থাকতে পারিনি :-)
রাদাই

যখন এই প্রশ্নের উত্থাপিত প্রশ্নের সঠিক সমাধান না হয় তখন কেন এই উত্তরটির প্রায় শতাধিক উত্সাহ থাকবে? আমি হারিয়ে
গিয়েছি

48

আমার একই সমস্যা ছিল এবং এটি সমাধান করার জন্য আমি এই ব্লগ নিবন্ধটি অনুসরণ করি: http://www.mkyong.com/java/how-to-set-java_home-en वातावरण-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

@ এমকিয়ং এর বিশেষ টিএসস

সম্পাদনা: এখন আমি ব্যবহার করছি: jenv + sdkman


3
এটি আমার পক্ষে কাজ করেছে। আমি একটি ম্যাক ব্যবহার করছি, ম্যাকপোর্টগুলি এবং সূর্যের জেডিকে-র মাভেন সহ। স্পষ্টতই সেই কম্বোটি ছিল জটিল।
কোয়ান্টাম

1
মহান কাজ. সমস্ত আদেশের জন্য আপনাকে ধন্যবাদ! মাভেরিক্সে এখন কাজ করে
মাকসিম

1
এটি সবচেয়ে সহজ এবং সবচেয়ে মার্জিত সমাধান। ধন্যবাদ!
বিকে-

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

আমারও একই সমস্যা ছিল। আমি খুঁজে পেয়েছি যে মাভেন স্ক্রিপ্টটি নীচের বর্তমান জেডিকে লিঙ্কটি দেখে এবং একটি 1.6 জেডিকে খুঁজে পেয়েছে। আপনি সর্বশেষ জেডিকে ইনস্টল করলেও এটি সমাধান হয় না। আপনি কেবলমাত্র আপনার $ HOME / .Bash_profile স্ক্রিপ্টে JAVA_Home সেট করতে পেরে আমি পরিবর্তে প্রতীকী লিঙ্কটি ঠিক করার জন্য বেছে নিয়েছি:

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

যদি এমভিএন ক্লিন ইনস্টল করুন -দেবগ জাভা দেখায় 1.6 এটি সঠিক উত্তর
চেতনার

4

কারণ নির্ণয়:

মাভেন "এমভিএন - রূপান্তর" চালিয়ে কোন জাভা সংস্করণ ব্যবহার করতে পারেন তা আপনি দেখতে পারেন

দেবিয়ান এর সমাধান:

এমভিএন স্ক্রিপ্ট জাভাক (যা জাভাক) সন্ধান করে অভ্যন্তরীণভাবে জাভাহোম এনভের ভেরিয়েবল সেট করে। অতএব, যদি আপনার একসাথে একাধিক জাভা সংস্করণ ইনস্টল করা থাকে, যেমন জেডিকে and এবং জেডিকে between এবং তাদের মধ্যে বেছে নিতে দেবিয়ান বিকল্প সিস্টেম ব্যবহার করুন, যদিও আপনি "জাভা" বিকল্পটি জেডিকে to তে পরিবর্তন করেছেন, এমভিএন এখনও জেডিকে use ব্যবহার করবে You "জাভ্যাক" এর বিকল্পটিও পরিবর্তন করতে হবে। উদাহরণ:

# 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 এ বিশদ হিসাবে বর্ণনা করা হয়েছে , কারণ এটি বিভিন্ন জাভা সরঞ্জামগুলির সমস্ত বিকল্পকে বদলে দেবে (এক ডজন বা তারও বেশি কিছু আছে)।


ধন্যবাদ, ঠিক আমি যা খুঁজছিলাম
ইভানডেনজেন

ধন্যবাদ, এর সাথে জাভা সংস্করণটি সেট করার পরে আমি বিভ্রান্ত হয়েছিলাম: আপডেট-বিকল্পগুলি
কনফিগ জাভ্যাক

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 ব্যবহার করেছি ... তবে সম্ভব হলে সর্বশেষ ব্যবহার করা ভাল to
লুকাস

আরও অনুসন্ধান করা হয়েছে। আপনি যদি এটি ব্যবহার করেন তবে আপনার নির্ভরতা প্লাগইন পরিচালনাটি পরীক্ষা করুন।
জোপ এগজেন

<pluginD dependency> যোগ করা হয়েছে, একই ইস্যু
জেমস রায়টসেভ

যদি এটি একটি মডিউল প্রকল্প হয় তবে পিতামাতার প্রকল্পটি সন্ধানের পক্ষে মূল্যবান হতে পারে। এই ক্ষেত্রে এখানে হতে পারে না। জাভা কি 1.7 দিয়ে চলছে?
জোপ ডিম্বন

2

Eclipse- এ প্রোপার্টিগুলিতে জাভা সংকলক সেটিংস পরিবর্তন করার চেষ্টা করুন-

গোটো: পছন্দসমূহ-> জাভা-> সংকলক-> সংকলক কমপ্লায়েন্স স্তর-> 1.7 ঠিক আছে প্রয়োগ করুন

আইডিই পুনরায় চালু করুন।

প্রকল্পের জন্য সংকলক সেটিংটি নিশ্চিত করুন- গোটো: প্রকল্পের বৈশিষ্ট্য-> জাভা সংকলক-> আনচেক করুন (জাভা বিল্ড পাথের উপর 'এক্সপ্লোরেশন এনভায়রনমেন্ট' জাভাএসই-১.6 'থেকে সম্মতি ব্যবহার করুন)) এবং ড্রপডাউন থেকে ১.7 নির্বাচন করুন। (ইতিমধ্যে 1.7 থাকলে উপেক্ষা করুন)

আইডিই পুনরায় চালু করুন।

এখনও যদি সমস্যাটি থেকে যায় - টার্মিনাল-এ কমান্ড ব্যবহার করে স্বতন্ত্র পরীক্ষার কেসগুলি চালান

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

আপনার গ্রহে গ্রাহক প্রজেক্টে ডান ক্লিক করুন এবং "রান কনফিগারেশন" খুলুন .. সেখানে জেআর সংস্করণটি দেখুন। কিছু সময় বিল্ডপ্যাথের সংস্করণ পরিবর্তন করার পরেও এটিগ্রহণের সাথে ডিফল্টরূপে পরিবর্তিত হবে না।


2

একটি নির্দিষ্ট সংকলনের জন্য যার জন্য (অ-ডিফল্ট /etc/alternatives/java) জেভিএম প্রয়োজন হয়, এর mvnসাথে কমান্ডের উপসর্গ বিবেচনা করুন JAVA_HOME,

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

এখানে আমরা ডিফল্টটি জাভা 8 বলে ধরে নিই, অন্যদিকে নির্দিষ্ট প্রকল্পের জন্য আমাদের জাভা require প্রয়োজন।


এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে কারণ তখন জিআইটি (বা এসসিএম) থেকে ডাউনলোড করা প্রকল্পের উত্সটিতে পরিবর্তনগুলি করা দরকার নেই
jwilleke

এই উত্তরটি আরও উন্নয়নের দাবিদার। এটি আমার মেশিনে জাভা requ এর প্রয়োজনীয় একটি কোড সংকলন করতে সহায়তা করেছিল যেখানে জাভা ৮ ছিল - জাভা and এবং জাভা ৮ ইনস্টল করে পুনরায় ইনস্টল না করে
R11G

1

A জাভিটিউউউউইউউন_উહોম} / বিন / জাভাসিও চেষ্টা করতে পারেন ...

<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
কখনও ভাগ করা হবে এমন কোনও কোডে আপনার পাথ হার্ডকোড করা উচিত নয়।
জান সেগ্রে

@ জন সেগ্রে, ঠিক আছে আমি এটি পরিবর্তন করেছি :)
বায়বোরা.ওরেেন

0

ঠিক আছে, আমি নিজেই এই সমস্যাটি সমাধান করেছি। এটি আপনার জেএওয়াহোহোম আরও গুরুত্বপূর্ণ, আপনি যদি মাভেন প্লাগইন থেকে উত্স / লক্ষ্য বৈশিষ্ট্যের তুলনায় কম বা কোনও সংস্করণ না পান তবে আপনি এই ত্রুটিটি পেয়ে যাবেন।

আপনার জাভাআহোমে একটি ভাল সংস্করণ রয়েছে তা নিশ্চিত করুন এবং এটি আপনার রাস্তায় অন্তর্ভুক্ত করুন।


0

আপনি জাভাটির একটি ভুল সংস্করণ উল্লেখ করছেন। java -version (আপনার টার্মিনালে) আপনি ব্যবহার করছেন জাভাটির সংস্করণ পরীক্ষা করতে। সর্বশেষতম মাভেন সংকলক সংস্করণের জন্য মাভেন-কমাইল-প্লাগইন এ যান আপনি জাভা 6 ব্যবহার করছেন এবং মাভেন সংকলক প্লাগইনের সর্বশেষতম সংস্করণটি 3.1 হলে আপনার প্লাগইনটি এর মতো দেখাতে পারে is

<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

আমি এই সমস্যাটি ইনটেলিজ আইডিইএ 14 এ না হওয়া পর্যন্ত আমি ফাইল মেনু -> প্রকল্পের কাঠামোতে না গিয়ে প্রজেক্ট এসডিকে 1.7 এবং প্রকল্পের ভাষা স্তর 7 এ পরিবর্তন করেছি।


0

গ্রহনের সাথে কাজ করার সময় আমার এই সমস্যা হয়েছিল, আমাকে প্রকল্পের নির্মাণের পথটি পরিবর্তন করতে হয়েছিল যাতে এটি জেরে 7 উল্লেখ করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.