আমি কীভাবে ম্যাক ওএসের ডিফল্ট জাভা ভিএম / ইউএসআর / লিবেক্সেক / জাভা_হোম থেকে ফিরে যেতে পারি


108

(এটি এসইউ করা উচিত কিনা নিশ্চিত ছিল না ... মাইগ্রেশন অবশ্যই একটি বিকল্প, তবে আরও প্রোগ্রামাররা এখানে প্রশ্নগুলি পড়েন, তাই এখানে যায়))

আমি ম্যাক ওএস এক্স ১০.৮.৪ চালাচ্ছি, এবং আমি অ্যাপলের জেডিকে ১..0.০_৫১ ইনস্টলারের পাশাপাশি ওরাকল এর জেডিকে ১.7.০.২5 আছে। আমি সম্প্রতি প্রি-রিলিজ সফ্টওয়্যারগুলির জন্য প্রয়োজনীয় এর জন্য ওরাকল এর 1.8 পূর্বরূপ জেডিকে ইনস্টল করেছি। এখন, আমি যখন / ইউএসআর / লিবেক্সেক / জাভা_হোম চালাই, আমি এটি পাই:

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
    1.8.0, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    1.7.0_25, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
    1.6.0_51-b11-457, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_51-b11-457, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

গ্রেট।

তবে, চলমান:

$ java -version

রিটার্নস:

java version "1.8.0-ea"

তার মানে হল যে জাভার ডিফল্ট সংস্করণটি বর্তমানে প্রাক-প্রকাশের সংস্করণ, যা কিছু "সাধারণ" প্যাকেজগুলি ভেঙে দেয় (আমার ক্ষেত্রে, ভিজুয়ালভিএম)।

আমি সেট করতে পারছি না JAVA_HOMEকারণ লঞ্চ অ্যাপ্লিকেশনগুলি পরিবেশের ভেরিয়েবলগুলি উপেক্ষা করে, এমনকি কমান্ড লাইন থেকে উদ্বোধন করার সময়ও (যেমন $ open /Applications/VisualVM.app)।

সুতরাং, আমি কী এমন কোনও ফাইল সম্পাদনা করতে পারি যেখানে আমি আমার জেভিএম অর্ডারিং পছন্দগুলি বিশ্বব্যাপী সেট করতে পারি ?

(দয়া করে আমাকে জাভা অগ্রাধিকার প্যানেলটি চালু করতে বলবেন না কারণ এটি কেবল কার্যকরভাবে কাজ করে না: এতে কোনও কার্যকর কিছু থাকে না এবং কেবলমাত্র আমি যে 4 টি জেভিএম ইনস্টল করেছি সেগুলির মধ্যে একটি তালিকাবদ্ধ করে))

আপডেট :

ওরাকল জেভিএম বাস করে /Library/Java/JavaVirtualMachinesjdk1.8.0.jvm.xyzকিছু পরিবর্তন না করে জেডিকে 1.8 ডিরেক্টরিটির পুনরায় নামকরণ করা : java_homeএটি এখনও সঠিক জায়গায় খুঁজে পাওয়া যায় এবং এখনও / usr / বিন / জাভা চালিয়ে 1.8 জেভিএম চালায়। এটি সিন্ডিংস ইত্যাদির কোনও সমস্যা নয় etc.

অনুরূপ প্রশ্নের উত্তর

যদিও এই উত্তর অফার কি একটি হ্যাক যে java_home দ্বারা কুড়ান হওয়া থেকে জাভার সংস্করণ মুছে ফেলা হবে পরিমাণ, এটা এখনও এই প্রশ্নের উত্তর নেই কিভাবে java_home তার ডিফল্ট বেছে নেয় এবং থাকুক বা না থাকুক ব্যবহারকারীদের করতে অ ধ্বংসাত্মক এটি সেট


'যা জাভা' টাইপ করুন এবং ব্রেডক্র্যাম্বগুলি অনুসরণ করুন। /usr/bin/javaকেবল একটি সিমিলিংক
ব্রায়ান রোচ

11
ওখানে এসেছি। /usr/bin/javaপয়েন্ট /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javaVersionsডিরেক্টরি 1.8.0 JDK করার জন্য একটি সিমবলিক লিঙ্ক ধারণ করে না। পরিবর্তে, এতে একটি ডিরেক্টরি রয়েছে Aযা সহায়তার সাথে ডাকা হয় যা Currentনির্দেশ করে। Aএটি "জাভাএহোম" নয় It এর একটি উপ-ডিরেক্টরি রয়েছে Commandsযার একটি javaকমান্ড রয়েছে, তবে এটি একটি অস্বচ্ছ ইউনিভার্সাল বাইনারি যা কে জানে-আমি সন্দেহ করি এটি java_homeকোন জেভিএম ব্যবহার করবে ইত্যাদি সিদ্ধান্ত নেওয়ার জন্য সন্দেহ করে ।
ক্রিস্টোফার শুল্টজ

2
যদি এটি অফ-টপিক হয় তবে দয়া করে বন্ধ করার পরিবর্তে স্থানান্তর করুন। এফডাব্লুআইডাব্লু, এটি "প্রোগ্রামাররা সাধারণত সফ্টওয়্যার সরঞ্জামগুলি ব্যবহার করে" এর সম্পর্কে এটি "অফ-টপিক" বন্ধ করা স্বতন্ত্র।
ক্রিস্টোফার শুল্টজ

হ্যাঁ, এটা হতাশার! আমি কেবল সবার জন্য একটি জেডিকে চাই, বা সম্ভবত 2 যা আমি খুব সহজেই 1.7 এবং 1.8 এর মধ্যে স্যুইচ করতে পারি।
ব্রায়ান

1
: আমি এই তাই এই প্রশ্নের জন্য দরকারী উত্তর পাওয়া stackoverflow.com/a/44169445/2987755
dkb

উত্তর:


89

আমি মনে করি JAVA_HOMEআপনি করতে পারেন সেরা। কমান্ড-লাইন সরঞ্জামগুলি পরিবেশের পরিবর্তনশীলকে পছন্দ করে javaএবং javacসম্মান জানায়, কমান্ড লাইন সরঞ্জামগুলিকে জাভা use ব্যবহার /usr/libexec/java_home -v '1.7*'করতে আপনাকে একটি উপযুক্ত মান JAVA_HOMEদেওয়ার জন্য ব্যবহার করতে পারেন।

export JAVA_HOME="`/usr/libexec/java_home -v '1.7*'`"

তবে স্ট্যান্ডার্ড ডাবল-ক্লিকযোগ্য অ্যাপ্লিকেশন বান্ডিলগুলিতে মোটামুটি ইনস্টল করা জেডিকে ব্যবহার করা /Library/Javaহয় না। .appঅ্যাপল এর ব্যবহার করে পুরানো স্টাইলের বান্ডিলগুলিJavaApplicationStub অ্যাপল জাভা 6 ব্যবহার করবে /System/Library/Frameworksএবং একটি নতুন বিন্যাসিত অ্যাপ্লান্ডার ব্যান্ডেলযুক্ত জেআরই ছাড়াই নির্মিত হবে "পাবলিক" জেআরই ব্যবহার করবে - এটি স্টাব কোডটিতে/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home হার্ড-কোডেড এবং পরিবর্তন করা যায় না, এবং আপনার একই সাথে দুটি পৃথক পাবলিক জেআর ইনস্টল থাকতে পারে না।


সম্পাদনা: আমি ভিজুয়ালভিএম সম্পর্কে বিশেষভাবে নজর রেখেছি, ধরে নিলাম আপনি ডাউনলোড পৃষ্ঠা থেকে "অ্যাপ্লিকেশন বান্ডেল" সংস্করণটি ব্যবহার করছেন এবং এই বিশেষ অ্যাপটি অ্যাপবান্ডার অ্যাপ্লিকেশন নয়, পরিবর্তে এর প্রধান নির্বাহযোগ্য একটি শেল স্ক্রিপ্ট যা একটি নম্বরকে কল করে অন্যান্য শেল স্ক্রিপ্ট এবং বিভিন্ন কনফিগারেশন ফাইল পড়তে। এটি /Library/Java7u10 বা তার পরের সর্বাধিক নতুন জেডিকে বাছাই করা ডিফল্ট বা জাভা 6 ব্যবহার করে যদি আপনার জাভা 7 ইনস্টলেশন 9 বা তার আগের আপডেট হয়। তবে শেল স্ক্রিপ্টগুলিতে যুক্তিটি উন্মোচন করা আমার কাছে দেখে মনে হচ্ছে আপনি কোনও কনফিগারেশন ফাইল ব্যবহার করে কোনও নির্দিষ্ট জেডিকে নির্দিষ্ট করতে পারেন।

একটি টেক্সট ফাইল তৈরি করুন ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf(ভিজুয়ালভিএম এর যে কোনও সংস্করণ আপনি ব্যবহার করছেন তার সাথে 1.3.6 প্রতিস্থাপন করুন) লাইনটি রয়েছে

visualvm_jdkhome="`/usr/libexec/java_home -v '1.7*'`"

এবং এটি এটি 8 এর পরিবর্তে জাভা 7 চয়ন করতে বাধ্য করবে।


এটি আমার সিস্টেমে কেস হিসাবে দেখা যায় না। JDK 1.8 কাজ করার আগে ভিজ্যুয়ালভিএম চালু করা হয়েছে। JDK1.8 এর পরে, ভিজুয়ালভিএম স্প্ল্যাশ স্ক্রিনটি দেখায়, তারপরে মারা যায়। JDK1.8 ডিরেক্টরিটি / লাইব্রেরি / জাভার বাইরে সরানো তার চালনার ক্ষমতাটি পুনরুদ্ধার করে।
ক্রিস্টোফার শুল্টজ

@ ক্রিস্টোফারশাল্টজ ভিজ্যুয়ালভিএম বান্ডেলের ভিতরে আমার নজর ছিল এবং দেখা যাচ্ছে এটি কোনও সাধারণ অ্যাপবান্ডার অ্যাপ্লিকেশন নয়। একটি সম্ভাব্য কাজের জন্য আমার সম্পাদনা দেখুন।
ইয়ান রবার্টস

দুঃখিত, আমি আপনার সম্পাদনার আগে আমার আগের মন্তব্য লিখেছিলাম। আমি সেই কৌশলটি ব্যবহার করে ভিজ্যুয়ালভিএম চালানোর জন্য চেক-আউট করব, তবে এটি সর্বজনীন-প্রযোজ্য বলে সম্ভাবনা কম। আমার কাছে জাভা ভিত্তিক অন্যান্য সফটওয়্যারগুলির একটি গুচ্ছ রয়েছে, যার সাথে এক্লিপস, জ্যাস্পারপোর্টস আইআরপোর্ট ইত্যাদি প্রযোজ্য যা এগুলির দ্বারা প্রভাবিত হওয়ার সম্ভাবনা রয়েছে। আমি মনে করি আমি বরং JDK1.8 ডিরেক্টরিটি অন্য কোথাও সরিয়ে নিয়ে যাচ্ছিলাম এবং যা প্রকৃতপক্ষে আমার প্রয়োজন হওয়া (কয়েক) বারের জন্য স্পষ্টভাবে JAVA_HOME এর সাথে ব্যবহার করব।
ক্রিস্টোফার শুল্টজ

1
হ্যাঁ, আপনি ঠিক বলেছেন, JAVA_HOMEযাওয়ার উপায় এবং সাধারণভাবে আপনার সেরা বাজি হ'ল অন্যান্য ক্ষেত্রে আপনার যে অপ্রয়োজনীয় সংস্করণটি প্রয়োজন তা নির্দিষ্ট করে দেওয়া। অপ্রয়োজনীয় উপর ভিত্তি করে, এটি জেডিকে 8 এর পরিবর্তে জেकेডি 7 প্রদর্শন করতে export JAVA_VERSION=1.7আপনাকে java_homeডিফল্ট তৈরি করতে পারে , তবে এটি বিরতি java_home -v 1.6কারণ java-homeএটি এটিকে একটি অতিরিক্ত বাধা হিসাবে ব্যাখ্যা করে এবং পারস্পরিক অসন্তুষ্টিজনক বাধাগুলির কারণে ছেড়ে দেয়, তারপরে কেবল --failfastবিকল্পের সাথে ডিফল্ট 1.8 দিয়ে যায় ।
অ্যান্ড্রুডটন

2
শেল স্ক্রিপ্ট / কমান্ডের আশ্রয় নেওয়ার পরিবর্তে সিস্টেম পছন্দগুলি জাভা কন্ট্রোল প্যানেল কেবলমাত্র একটি তালিকা উপস্থাপন করে না তা আমি বুঝতে পারি না। আমার সন্দেহ হয় এটি কেবল ব্রাউজারে চালিত অ্যাপলেটগুলির জন্য ...
JGFMK

51

আমি সেখানেও গিয়েছি এবং সর্বত্র অনুসন্ধান করেছি যে কীভাবে /usr/libexec/java_homeকাজ করে তবে এটি উপলব্ধ জাভা ভার্চুয়াল মেশিনগুলি কীভাবে তালিকাভুক্ত করে তা নির্ধারণ করে তার কোনও তথ্য আমি পাইনি।

আমি কিছুটা পরীক্ষা-নিরীক্ষা করেছি এবং আমি মনে করি এটি কেবল একটি কার্যকর করে ls /Library/Java/JavaVirtualMachinesএবং তারপরে ./<version>/Contents/Info.plistসেখানে পাওয়া সমস্ত রানটাইমগুলির পরীক্ষা করে ।

এটা তোলে তারপর তাদের বাছাই করে সাজানো কী দ্বারা JVMVersionInfo.plist অন্তর্ভুক্ত এবং ডিফল্ট দ্বারা এটি তার ডিফল্ট জেভিএম যেমন প্রথম এন্ট্রি ব্যবহার করে।

আমি মনে করি কেবলমাত্র আমরা যা করতে পারি তা sudo vi /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Info.plistহ'ল প্লিস্টটি পরিবর্তন করা : এবং তারপরে JVMVersion কে 1.8.0অন্য কোনও কিছুতে পরিবর্তন করুন যা এটিকে শীর্ষের পরিবর্তে নীচের দিকে সাজিয়ে তোলে, এর মতো !1.8.0

কিছুটা এইরকম:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <dict>
            ...
            <key>JVMVersion</key>
            <string>!1.8.0</string>   <!-- changed from '1.8.0' to '!1.8.0' -->`

এবং তারপরে এটি যাদুকরীভাবে তালিকার শীর্ষ থেকে অদৃশ্য হয়ে যায়:

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (3):
    1.7.0_45, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
    1.7.0_09, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home
    !1.8.0, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home

এখন আপনাকে লগআউট / লগইন করতে হবে এবং তারপরে:

java -version
java version "1.7.0_45"

:-)

এখনই অন্য কোনও কিছু ভেঙে যায় বা জাভাটির ১.৮.০-ই সংস্করণটি এখনও সঠিকভাবে কাজ করে তবে অবশ্যই আমার ধারণা নেই।

আপনার সম্ভবত এটির কিছু করা উচিত নয় তবে এর পরিবর্তে কেবল 1.8.0 টিই ডিল ইনস্টল করুন।

তবে এখনও পর্যন্ত এটি আমার পক্ষে কাজ করেছে।


এটি আমার পক্ষে কাজ করেছে। আইডিয়া এসবিটি প্লাগইনটি ম্যাকওএসে আমার জন্য কাজ করে রাখতে আমাকে এই টুইটটি ব্যবহার করতে হয়েছিল। আমি আমার ব্লগে তে এটি উল্লেখ করছি agilebuild.blogspot.com/2014/02/...
Antoine

এটি কাজ করে তবে এটি কিছুটা জটিল বলে মনে হচ্ছে এবং এটি কোনও স্ট্যান্ডার্ড অপারেশন পদ্ধতির মতো দেখাবে না। আরও ভাল পন্থা থাকলে আমি ঘোরাফেরা করি।
ওয়েইবো লি

= রপ্তানি IDEA_JDK: আমি এখনও এই জন্য একটি সমাধান চাই, কিন্তু JDK সেটিং Intellij ব্যবহার করার জন্য আমি এই আমার zshenv যোগ করা হবে /usr/libexec/java_home -v 1.7। আমি মনে করি জাভাহোমের জন্যও আমি একই করব ...
ডেভিড

জাভা 9 টি ডাবল-ক্লিক অ্যাপ্লিকেশনগুলি চালু করা (কীস্টোর স্টোর এক্সপ্লোরারের কোনও সমস্যার কারণে) ব্যবহার করা এড়াতে আমি এই উত্তরটি ব্যবহার করতে পরিচালনা করি। ধন্যবাদ!
নিকোলাস হেনাওক্স

2
থেকে একটি উদ্ধৃতাংশ JDK এবং MacOS উপর JRE- র ইনস্টলেশন : MacOS 2012-006 জাভা ইনস্টল করার পরে, /usr/bin/javaপাবেন নতুন JDK ইনস্টল করা, এবং জাভা-সম্পর্কিত কম্যান্ড-লাইন সরঞ্জাম সব জন্য ব্যবহার করবে /usr/bin
জেরেমি কাও

7

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

  • jdk1.7.0_51.jdk
  • jdk1.8.0.jdk

কল্পনা করুন যে 1.8 আমাদের ডিফল্ট, তারপরে আমরা কেবল একটি নতুন ফোল্ডার যুক্ত করব (উদাহরণস্বরূপ 'পুরাতন') এবং সেই নতুন ফোল্ডারে ডিফল্ট jdk ফোল্ডারটি স্থানান্তর করি। কি java -versionএবং, voila আবার, 1.7!


1
অবিশ্বাস্য, তবে এটি কাজ করেছিল ... ধন্যবাদ ম্যাক ওএস মোজাভে
মাইচা ডবি ডব্রাজাস্কি

5

এটি বেশ সহজ, যদি আপনি আপনার হাতাটি রোল করতে আপত্তি করেন না ... / লাইব্রেরি / জাভা / হোম জাভাআহোম-এর জন্য ডিফল্ট এবং এটি কেবল একটি লিঙ্ক যা একটিতে নির্দেশ করে:

  • /System/Library/Java/JavaVirtualMachines/1.?.?.jdk/Contents/Home
  • /Library/Java/JavaVirtualMachines/jdk1.?.?_??.jdk/Contents/Home

সুতরাং আমি জাভাআহোম এর সামগ্রীগুলি পরিবর্তন না করেই আমার ডিফল্ট জেভিএম / জেডি কে সংস্করণটি পরিবর্তন করতে চেয়েছিলাম ... / লাইব্রেরী / জাভা / হোম বর্তমান জেভিএম / জেডিকে-র জন্য মানক অবস্থান এবং এটিই আমি সংরক্ষণ করতে চেয়েছিলাম ... এটি আমার কাছে মনে হয় সবচেয়ে কম পার্শ্ব প্রতিক্রিয়া সহ জিনিসগুলি পরিবর্তন করার সবচেয়ে সহজ উপায়।

এটি আসলেই সহজ। জাভা-রূপান্তর দিয়ে আপনি জাভাটির কোনও সংস্করণ দেখতে চান তা পরিবর্তন করতে, আপনাকে যা করতে হবে তা এর কয়েকটি সংস্করণ:

cd /Library/Java
sudo rm Home
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home ./Home

আমি সময় নিইনি তবে একটি খুব সহজ শেল স্ক্রিপ্ট যা উপরের সিমলিংকটিকে পুনরায় পোস্ট করতে / usr / lixec / java_home এবং ln ব্যবহার করে তোলে বোকা বানানো সহজ হওয়া উচিত ...

একবার আপনি যেখানে পরিবর্তন করেছেন / লাইব্রেরি / জাভা / হোম নির্দেশিত ... আপনি সঠিক ফলাফল পাবেন:

cerebro:~ magneto$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM)
64-Bit Server VM (build 25.60-b23, mixed mode)

1
এই জিনিসটি কীভাবে এটি কাজ করে না: /Library/Java/Homeপ্রকৃতপক্ষে একটি সিমিলিংক, তবে এটি নির্দেশ করে /System/Library/Frameworks/JavaVM.framework/Homeযা নিজেই একটি বড় আকারের সিমলিংকের মধ্যে পড়ে যা শেষ পর্যন্ত আপনাকে পাতায় ... একটি জাদুকরী কমান্ড যা প্রবর্তনের জন্য সঠিক জেআরই নির্ধারণ করে। নোট করুন যে /usr/libexec/java_homeএই যাদুতে লিঙ্ক। সুতরাং, আপনি কেবল সিমলিংকগুলি প্রতিস্থাপন করে এবং একক জেআরইয়ের দিকে ইশারা করে সমস্ত কিছুতে বাধা দিতে পারেন, তবে আপনাকে প্রতিবার এটি আপডেট করতে হবে। স্পষ্টতই এর মত set_preferred_jvm_versionবা অনুরূপ কোনও আদেশ নেই ।
ক্রিস্টোফার শুল্টজ

1
এই কৌশলটির সুবিধাটি হ'ল এটি আপনাকে আর JAVA_HOMEকোথাও সেট করার প্রয়োজন হয় না । জাভা ভিত্তিক প্রোগ্রামগুলি "পছন্দসই" জাভা ভিএম এর সাথে আরম্ভ হবে কিনা তা দেখার জন্য আমি এই কৌশলটি নিয়ে খেলব। আমি এটি সন্দেহ করি তবে এটি বেশ ভঙ্গুর।
ক্রিস্টোফার শুল্টজ

আজকাল আমার এই ঠিক আছে .bash_profile:export JAVA_HOME=`/usr/libexec/java_home -v 12`
jrypkahauer

এটি কোনও আইকনটিতে ডাবল-ক্লিক করার জন্য কাজ করে না, যা পুরো পয়েন্টের মতো ছিল। কেবলমাত্র কমান্ড-লাইন থেকে কাজ করা সমাধানগুলি ... সমাধান নয়।
ক্রিস্টোফার শুল্টজ

3

জাভা 7-এর জন্য ওরাকল এর আনইনস্টলেশন নির্দেশাবলী আমার পক্ষে কাজ করেছিল।

উদ্ধৃতাংশ:

জেডিকে আনইনস্টল করা জেডিকে আনইনস্টল করতে আপনার অবশ্যই প্রশাসকের অধিকার থাকতে হবে এবং মুছে ফেলা কমান্ডটি মূল হিসাবে অথবা সুডো (8) সরঞ্জাম ব্যবহার করে কার্যকর করতে হবে using

/ লাইব্রেরি / জাভা / জাভা ভার্চুয়ালম্যাচাইনগুলি নেভিগেট করুন এবং যার নামটি নিম্নলিখিত ফর্ম্যাটটির সাথে মেলে সেই ডিরেক্টরিটি সরিয়ে ফেলুন: *

/Library/Java/JavaVirtualMachines/jdk<major>.<minor>.<macro[_update]>.jdk

উদাহরণস্বরূপ, 7u6 আনইনস্টল করতে:

% rm -rf jdk1.7.0_06.jdk


2
এই প্রশ্নটি আন-ইনস্টলশন সম্পর্কে নয় ... এটি ইনস্টল করা ব্যক্তিদের কাছ থেকে "প্রাথমিক" জেভিএম চয়ন করার বিষয়ে ছিল ...
ক্রিস্টোফার শুল্টজ

3

কিছুটা দেরি হলেও ম্যাক ওএসএক্সের সাথে এটি একটি চলমান সমস্যা ...

আমি যে সহজ সমাধানটি পেয়েছি তা হ'ল অ্যাপল ইনস্টল করা ওপেনজেডিকে স্টাফগুলি সরানো। যতবারই ম্যাক ওএসএক্সের আপডেট আসে এটি ইনস্টল হয়ে যায় এবং আপনাকে এটি আবার সরিয়ে ফেলতে হবে।

আপনি জাভা ব্যবহার করে আপনার ম্যাকটিতে গুগল অ্যাপ ইঞ্জিনের জন্য অ্যাপ্লিকেশনগুলি বিকাশ করলে এটি সত্যিই ভাল কাজ করে। ওপেনজেডিকে ভাল কাজ করে না এবং ম্যাক ওএসএক্স যোসোমাইট আপগ্রেডের সাথে আসা জাভা সংস্করণ সহায়ক ত্রুটি সহ প্রতিটি স্থাপনায় অ্যাপ ইঞ্জিন ক্রাশের জন্য এক্সপ্লাইস প্লাগ-ইন তৈরি করবে: "রিড টাইম আউট"।


1
মজার ... আমি ভেবেছিলাম অ্যাপল এই সময়ে জাভা পুরোপুরি সরিয়ে নিয়েছে। আমি ম্যানুয়ালি অ্যাপলের জাভা 1.6 জেভিএম অপসারণের কথা মনে করি না এবং এটি অবশ্যই এখানে নেই। যে কোনও হারে, এটি প্রকৃত সমস্যাটিকে প্রকৃত সমাধান করতে পারে না যা ইনস্টল করা হয়েছে এমন একটি নির্বাচন প্রদত্ত পছন্দসই JVM নির্দিষ্ট করে।
ক্রিস্টোফার শুল্টজ

আপনি সঠিক. এটি প্রশ্নের উত্তর দেয় না। এটির উত্তর দেয়: আপনি যদি ব্যবহার করা জেভিএম সরান, তবে তালিকার 'পরবর্তী' ব্যবহার করা হবে। সম্ভবত এটি সাহায্য করে।
মো'ইন ক্রিমার্স

এটি ব্যাখ্যা করে যে কেন জেডিপি 8 ইনস্টল করার পরে, এটি জাভা ভার্চুয়ালম্যাচাইনস ফোল্ডারে প্রদর্শিত হবে না? আমি যা দেখি তা হ'ল "1.6.0.jdk" আমি কোনও সংস্করণ ইনস্টল করি না কেন।
কেন

@woz OSX 10.10.2 এ সবেমাত্র jdk-8u31-macosx-x64 ইনস্টল করেছেন এবং প্রত্যাশা অনুযায়ী জাভা ভার্চুয়ালমাচাইনস ফোল্ডারে ভিএম ইনস্টল করা হয়েছে।
মো'আন ক্রিমারস

আপনি কি সুযোগে সমান্তরাল চালাচ্ছেন? আমি এটি প্যারালালসের উইন্ডোজ সাইডে ইনস্টল করেছি এবং 8u31 প্রত্যাশিত হিসাবে ইনস্টল করেছি..ম্যাক সাইডে নয় ...
কেন

3

আমি "জেনভ" এবং অন্যান্য জিনিসগুলি যেমন "জাভাহোম" নির্ধারণের মতো সফলতা ছাড়াই পরীক্ষা করেছি। এখন আমি এবং নিম্নলিখিত সমাধানটি দিয়ে শেষ করি

function setJava {
    export JAVA_HOME="$(/usr/libexec/java_home -v $1)"
    launchctl setenv JAVA_HOME $JAVA_HOME
    sudo ln -nsf "$(dirname ${JAVA_HOME})/MacOS" /Library/Java/MacOS 
    java -version
}

(~ / .bashrc বা ~ / .bash.profile বা ~ / .zshrc এ যুক্ত হয়েছে)

এবং এর মতো কল করা:

setJava 1.8

java_home ভুল ইনপুট পরিচালনা করবে। সুতরাং আপনি কিছু ভুল করতে পারবেন না। মাভেন এবং অন্যান্য জিনিসগুলি এখনই সঠিক সংস্করণটি তুলবে।


1

উত্সটি উপলভ্য না হওয়ায় আমি বাস্তবে এই বিচ্ছিন্নতার দিকে একটু নজর রেখেছি।

/ usr / bin / java এবং / usr / lixec / java_home উভয়ই জাভালাউঞ্চিং.ফ্রেমেওয়ার্ক ব্যবহার করে। জাভাআহোম এনভায়রনমেন্ট ভেরিয়েবলটি প্রকৃতপক্ষে প্রথমে / ইউএসআর / বিন / জাভা এবং বন্ধুদের দ্বারা পরীক্ষা করা হয় (তবে / ইউএসআর / লিবেক্সেক / জাভা_হোম নয়)) ফ্রেমওয়ার্কটি উপলব্ধ জেভিএমগুলি ফিল্টার করতে JAVA_VERSION এবং JAVA_ARCH এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে। সুতরাং, ডিফল্টরূপে:

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    11.0.5, x86_64: "Amazon Corretto 11"    /Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
    1.8.0_232, x86_64:  "Amazon Corretto 8" /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home

তবে সেটিংটি বলুন, JAVA_VERSION ডিফল্টটিকে ওভাররাইড করতে পারে:

$ JAVA_VERSION=1.8 /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home

আপনি / ইউএসআর / বিন / জাভা এবং / ইউএসআর / লিবেক্সেক / জাভা_হোম উভয় দিয়ে কিছু অতিরিক্ত ডিবাগ লগিং দেখতে সন্ধানের রাস্তা, জেভিএম, ইত্যাদি খুঁজে পেতে JAVA_LAUNCHER_VERBOSE = 1 সেট করতে পারেন।

অতীতে জাভালাউঞ্চিং.ফ্রেমেওয়ার্ক পছন্দসই জেভিএম অর্ডার সেট করার জন্য পছন্দসই সিস্টেমটি (com.apple.java.JavaPreferences ডোমেনের অধীনে) ব্যবহার করেছিল, ডিফল্ট জেভিএমকে প্লিস্টবাডির সাথে সেট করার অনুমতি দেয় - তবে আমি যতটা বলতে পারি তত ভাল কোডটি ম্যাকোজের সাম্প্রতিক সংস্করণে সরানো হয়েছে। পরিবেশের ভেরিয়েবলগুলি একমাত্র উপায় বলে মনে হয় (জেডিকে ইনফরমেশন.পালিস্ট সম্পাদনা বাদে তারা নিজেরাই বান্ডিল করে))

ডিফল্ট এনভায়রনমেন্ট ভেরিয়েবলগুলি সেট করা অবশ্যই আপনার। প্রোফাইলের মাধ্যমে বা লঞ্চের মাধ্যমে করা যেতে পারে, আপনার যদি প্রয়োজন হয় তবে একটি সেশন পর্যায়ে সেট করা উচিত।


এটি দুর্দান্ত তথ্য, ড্যান। .profileআমার ব্যবহারের ক্ষেত্রে ব্যবহার করা কার্যকর নয় (উদাহরণস্বরূপ লঞ্চপ্যাড থেকে একটি অ্যাপ্লিকেশন আরম্ভ করা) তবে টিপটি টিপসটি launchdভাল। আমাকে চেষ্টা করে দেখতে হবে, যেহেতু জাভার সাম্প্রতিক সংস্করণ উন্মাদনার অর্থ আমার জাভা বিভিন্ন প্রজন্মের এক সাথে ইনস্টল করা আছে, বিভিন্ন স্তরের (ব্যক্তিগত) বিশ্বাসের সাথে।
ক্রিস্টোফার শুল্টজ

-2

সম্পাদনা করুন: এই তথ্যটি বিশেষত ভিজ্যুভ্মের জন্য, অন্য কোনও জাভা অ্যাপ্লিকেশানের জন্য নয়

অন্যদের দ্বারা উল্লিখিত হিসাবে, আপনাকে ভিজ্যুভ.ম.কনফটি সংশোধন করতে হবে

ম্যাকের JvisualVM 1.3.6 এর সর্বশেষতম সংস্করণের জন্য, ইনস্টল ডিরেক্টরিগুলি পরিবর্তিত হয়েছে।

এটি বর্তমানে / অ্যাপ্লিকেশনস / ভিজুয়ালভিএম.এপ / কনটেন্টস / রিসোর্সেস / ভিসুয়ালভিএম /etc/visualvm.conf এ রয়েছে

তবে আপনি যেখানে ভিজুয়ালভিএম ইনস্টল করেছেন তার উপর এটি নির্ভর করে। আপনার ভিজ্যুয়ালভিএম এটি শুরু করার সবচেয়ে সহজ উপায় এবং এটি ব্যবহার করে প্রক্রিয়াটি দেখুন:

PS -ef | গ্রেপ ভিজুয়ালভিএম

আপনি এরকম কিছু দেখতে পাবেন:

... -নেটবিয়ানস.আইডিআরস = / অ্যাপ্লিকেশনস / ভিজুয়ালভিএম.এপ / সামগ্রী / সংস্থানসমূহ / ভিজ্যুভিএম / ভিজ্যুভাল ...

আপনি নেটবিয়ান.ডির সম্পত্তি নিতে এবং একটি ডিরেক্টরি সন্ধান করতে চান এবং আপনি ইত্যাদি ফোল্ডারটি দেখতে পাবেন।

এই লাইনে ভিজ্যুভ.ম.কনফ-এ কমেন্ট করুন এবং জেডিকে-র পথ পরিবর্তন করুন

visualvm_jdkhome="/path/to/jdk"

তদতিরিক্ত, যদি আপনি আপনার ভিজ্যুভিএমটির সাথে স্বচ্ছন্দতা বোধ করেন এবং আপনার প্রচুর স্মৃতি থাকে তবে আমি উপলব্ধ মেমরির পরিমাণ বৃদ্ধি এবং এটি সার্ভার মোডে চালানোর পরামর্শ দিচ্ছি:

visualvm_default_options="-J-XX:MaxPermSize=96m -J-Xmx2048m -J-Xms2048m -J-server -J-XX:+UseCompressedOops -J-XX:+UseConcMarkSweepGC -J-XX:+UseParNewGC -J-XX:NewRatio=2 -J-Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.d3d=false"

খারাপ পরামর্শ: একটি নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য স্টার্টআপ স্ক্রিপ্ট পরিবর্তন করা সম্ভবত অ্যাপ্লিকেশনটিকে ভেঙে দেবে এবং ওএসের জন্য ডিফল্ট জেভিএম পরিবর্তনের মূল সমস্যাটি সমাধান করবে না।
ক্রিস্টোফার শুল্টজ

দুর্ভাগ্যক্রমে অন্যদের দ্বারা উল্লিখিত হিসাবে, jvisualvm jvm নির্বাচনের জন্য মানক পদ্ধতি ব্যবহার করে না। এটি এই অ্যাপ্লিকেশনটির একমাত্র সমাধান।
সেলান্দ্রো

আমার উত্তরে আমি যেমন উল্লেখ করেছি যে আপনি নিজেই অ্যাপ্লিকেশন বান্ডেলের ভিতরে কোনও পরিবর্তন করার প্রয়োজন নেই, অ্যাপ্লিকেশনটি এর কনফিগারেশনটি লোড করতে পারে ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf
ইয়ান রবার্টস

-2

আমারও একই অবস্থা ছিল এবং নিম্নলিখিত প্রক্রিয়াটি আমার পক্ষে কাজ করেছিল:

  1. টার্মিনালে, টাইপ করুন

    vi ~/.profile
  2. তারপরে ফাইলটিতে এই লাইনটি যুক্ত করুন এবং সংরক্ষণ করুন

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

    যেখানে আপনার কম্পিউটারে সংস্করণ হ'ল 1.7.0_25 as

  3. সম্পাদক থেকে প্রস্থান করুন, তারপরে নীচের কমান্ডটি টাইপ করুন এটি কার্যকর হয়ে উঠবে

    source ~/.profile 

তারপরে ফলাফলটি পরীক্ষা করতে জাভা-রূপান্তর টাইপ করুন

    java -version 

প্রোফাইলে কি? থেকে: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

.Pofile ফাইল একটি লুকানো ফাইল। এটি একটি alচ্ছিক ফাইল যা সিস্টেমটিকে জানায় যে ব্যবহারকারী যখন এটির প্রোফাইল ফাইল লগ ইন করছে তখন চালানোর জন্য আদেশ দেয় For উদাহরণস্বরূপ, যদি আমার ব্যবহারকারীর নামটি ব্রুনো হয় এবং / ব্যবহারকারী / ব্রুনো / তে একটি প্রোফাইল ফাইল থাকে তবে এর সমস্ত বিষয়বস্তু রয়েছে লগ ইন প্রক্রিয়া চলাকালীন কার্যকর করা হবে।


লঞ্চপ্যাড থেকে ভিজুয়ালভিএম চালু করার সময় এটি কাজ করবে না। কমান্ড-লাইন থেকে আরম্ভ করা কখনই কোনও সমস্যা নয়, কারণ আপনি জাভাআহোম এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন।
ক্রিস্টোফার শুল্টজ

-2

ম্যাকওএস বর্তমান জাভা সংস্করণটি খুঁজে পেতে / ইউএসআর / লিবেক্সেক / জাভা_হোম ব্যবহার করে। বাইপাস করার একটি উপায় হ'ল উপরের @ void256 দ্বারা বর্ণিত প্লাস্ট ফাইলটি পরিবর্তন করা। অন্যান্য উপায়গুলি হল জাভা_হোমের ব্যাকআপ নেওয়া এবং এটি আপনার নিজস্ব স্ক্রিপ্ট জাভা_হোমে কোড
প্রতিধ্বনিত করে প্রতিস্থাপন করা $ জাভাহোম

The / .bash_profile- এ নিম্নলিখিত কমান্ডগুলি যুক্ত করে এসডিকে-এর পছন্দসই সংস্করণে JAVA_Home রফতানি করুন। JAVA_Home = "/ সিস্টেম / গ্রন্থাগার / জাভা / জাভা ভার্চুয়ালম্যাচাইনস / 1.6.0.jdk / বিষয়বস্তু / হোম" লঞ্চক্টেল সেটিংভ জাভাওয়াহোম $ জাভাআহোম /// পরিবেশকে পরিবর্তনশীল বৈশ্বিক করুন

উপরের কমান্ডগুলি রান করতে কমান্ড উত্স ~ / .bash_profile চালান।

যে কোনও সময় যে কোনও ব্যক্তিকে JAVA_HOME পরিবর্তন করতে হবে সে ~ / .bash_profile ফাইলে JAVA_HOME মানটি পুনরায় সেট করতে পারে।


পরিবেশের ভেরিয়েবলের উপর নির্ভর করে এমন কোনও কিছুই কার্যকর হবে না। মুল বক্তব্যটি হ'ল লঞ্চপ্যাড ইত্যাদির মাধ্যমে চালু হওয়া অ্যাপ্লিকেশনগুলির সেই পরিবেশগত সেটআপ থাকবে না। উপরের প্লাস্ট হ্যাকটিকে "সেরা" এর মতো মনে হচ্ছে এটি আসলে কাঙ্ক্ষিত ফলাফল অর্জন করে। আমি কোন ডাউনসাইড সম্পর্কে এখনও নিশ্চিত নই। @ টনি থেকে উত্তরটি দেখুন যা একই সমস্যা।
ক্রিস্টোফার

-3

আমি ডিফল্ট জাভা সংস্করণ ফর্মটি 1.6 * থেকে 1.7 * তে পরিবর্তন করতে চেয়েছিলাম। আমি নিম্নলিখিত পদক্ষেপগুলি চেষ্টা করেছিলাম এবং এটি আমার পক্ষে কাজ করেছে:

  • আন্ডার / ইউএসআর / বিন থেকে "জাভা" লিঙ্কটি সরানো হয়েছে
  • নতুন অবস্থানটির দিকে ইঙ্গিত করে এটি আবার তৈরি করা হয়েছে:

এলএন -এস / লাইব্রেরি / জাভা / জাভা ভার্চুয়ালম্যাচাইনস / জেডকি 1.7.0_51.jdk/ সামগ্রীসমূহ / হোম / বিন / জাভা জাভা

  • "java -version" দিয়ে যাচাই করা হয়েছে

জাভা সংস্করণ "1.7.0_51"
জাভা (টিএম) এসই রানটাইম পরিবেশ (বিল্ড 1.7.0_51-বি 13)
জাভা হটস্পট (টিএম) 64-বিট সার্ভার ভিএম (বিল্ড 24.51-বি03, মিশ্র মোড)


প্রশ্নের উত্তর দেয় না: এটি এর আচরণকে প্রভাবিত করবে না /usr/libexec/java_home
ক্রিস্টোফার শুল্টজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.