জাভা 9 সংকলক - - দয়া করে পতাকাটি কি?


89

জাভা 9 এর javacএকটি নতুন পতাকা রয়েছে --release:

> javac --help
...

--release <release>
    Compile for a specific VM version. Supported targets: 6, 7, 8, 9

এটি পতাকা -sourceএবং -targetপতাকাগুলি থেকে কীভাবে আলাদা ? এটি কি কেবল একটি শর্টকাট জন্য -source X -target X?


উত্তর:


113

বেপারটা এমন না.

জেপি 247: পুরানো প্ল্যাটফর্ম সংস্করণের জন্য সংকলন এই নতুন কমান্ড-লাইন বিকল্পটি সংজ্ঞায়িত করেছে--release:

আমরা একটি নতুন কমান্ড-লাইন বিকল্পটি সংজ্ঞায়িত করেছি --release, যা ক্লাস ফাইলগুলি তৈরি করতে স্বয়ংক্রিয়ভাবে সংকলকটি কনফিগার করে যা প্রদত্ত প্ল্যাটফর্ম সংস্করণের প্রয়োগের বিরুদ্ধে লিঙ্ক করে। মাধ্যম মধ্যে পূর্বনির্ধারিত javac, --release Nসমতূল্য-source N -target N -bootclasspath <bootclasspath-from-N> । (জোর আমার)

সুতরাং না, এটি সমতুল্য নয় -source N -target N। এই সংযোজনের কারণটি "অনুপ্রেরণা" বিভাগে বর্ণিত হয়েছে:

javacদুটি কমান্ড লাইন বিকল্প সরবরাহ করে -sourceএবং -targetযা সংকলক দ্বারা গৃহীত জাভা ভাষার সংস্করণ এবং যথাক্রমে এটি উত্পাদিত শ্রেণীর ফাইলগুলির সংস্করণ নির্বাচন করতে ব্যবহার করা যেতে পারে। ডিফল্টরূপে, তবে javacপ্ল্যাটফর্ম API এর সাম্প্রতিকতম সংস্করণটির বিরুদ্ধে সংকলন করে comp সংকলিত প্রোগ্রামটি দুর্ঘটনাক্রমে কেবল প্ল্যাটফর্মের বর্তমান সংস্করণে উপলব্ধ API গুলি ব্যবহার করতে পারে। এই জাতীয় প্রোগ্রামগুলি প্ল্যাটফর্মের পুরানো সংস্করণগুলিতে চলতে পারে না, নির্ধারিত মানগুলি নির্বিশেষে -sourceএবং -target। বিকল্পগুলি। এটি একটি দীর্ঘমেয়াদী ব্যবহারযোগ্যতা ব্যথা পয়েন্ট, যেহেতু ব্যবহারকারীরা আশা করেন যে এই বিকল্পগুলি ব্যবহার করে তারা ক্লাস ফাইলগুলি পাবেন যা নির্দিষ্ট প্ল্যাটফর্ম সংস্করণে চলতে পারে।

সংক্ষেপে, উত্স নির্দিষ্ট করে এবং লক্ষ্য বিকল্পগুলি ক্রস সংকলনের জন্য পর্যাপ্ত নয়। কারণ javac, ডিফল্টরূপে, প্ল্যাটফর্ম এপিআইয়ের সর্বাধিক সাম্প্রতিক সংকলন করে, তাদের পুরানো সংস্করণগুলিতে চালনার গ্যারান্টি দেওয়া যায় না can't এছাড়াও আপনি নির্দিষ্ট করতে হবে -bootclasspathক্রস কম্পাইল করার পুরোনো সংস্করণ সংশ্লিষ্ট সঠিকভাবে বিকল্প। পুরানো সংস্করণে এর বিরুদ্ধে সংকলন করতে এবং কার্যকর করার অনুমতি দেওয়ার জন্য এটিতে সঠিক API সংস্করণ অন্তর্ভুক্ত থাকবে। যেহেতু এটি প্রায়শই ভুলে গিয়েছিল, তাই একটি কমান্ড লাইন বিকল্প যুক্ত করার সিদ্ধান্ত নেওয়া হয়েছিল যা সঠিকভাবে ক্রস-সংকলনের জন্য প্রয়োজনীয় সমস্ত কাজ করেছিল।

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


একটি সন্দেহ, কোডে 9-10- র জেডিকে থেকে বৈশিষ্ট্যগুলি ব্যবহার করা সম্ভব এবং এটি এখনও জাভা রানটাইম 8 এ চলে?
ক্রিশ্চিয়ানো

না, তারা জে 8 বাইনারি উপস্থাপিত হবে না
Rogue

"প্ল্যাটফর্ম এপিআই" দ্বারা পুরুষরা কী করেন? বাইট-কোড স্তরে কি কিছু আছে? বা অন্তর্নিহিত x86 প্ল্যাটফর্ম বা ওএস এপিআইএস সম্পর্কিত কিছু?
হোসে সিফুয়েন্টেস

4
@JoseCifuentes, "প্ল্যাটফর্ম এপিআই" এখানে JDK এপিআই তার সংস্করণ দেওয়া হয় ছাড়া --releaseপতাকা, অনুমান করা হবে JDK থেকে কম্পাইল যা সাধারণত JDK থেকে পৃথক আপনি ব্যবহার লক্ষ্য জন্য ব্যবহৃত -sourceএবং -target। আপনি কখনই জেডিকে প্রবর্তিত ক্লাস / পদ্ধতি ব্যবহারের ক্ষেত্রে আপনার টার্গেটের ক্ষেত্রে এটি আপনাকে কাটতে পারে। এই সংক্ষিপ্ত আকারে বাইনারি সামঞ্জস্যতা ভঙ্গ করে নিঃশব্দে আপনি পূর্ববর্তী সংস্করণে পরে যুক্ত সংস্করণে যুক্ত হওয়া একটি পদ্ধতি ওভারলোড বেছে নিলে এটি অতিরিক্ত সূক্ষ্ম ।
অলিভার গন্ডিয়া

30

--release Xমাত্র একটি শর্টকাট বেশী -source X -target Xকারণ -sourceএবং -targetনিরাপদে একটি পুরোনো বিজ্ঞপ্তিতে কম্পাইল করার জন্য যথেষ্ট নয়। আপনাকে একটি -bootclasspathপতাকাও সেট করতে হবে যা অবশ্যই পুরানো প্রকাশের সাথে সঙ্গতিপূর্ণ হবে (এবং এই পতাকাটি প্রায়শই ভুলে যায়)। সুতরাং, জাভা 9 তারা একটি একক তৈরি --releaseতিনটি ফ্ল্যাগ জন্য তা পতাকাঙ্কিত যা প্রতিস্থাপন হল: -source, -targetএবং -bootclasspath

সুতরাং, এটি জাভা 1.7 সংকলনের একটি উদাহরণ:

javac --release 7 <source files>

মনে রাখবেন যে আপনার কম্পিউটারে জেডিকে 7 ইনস্টল করার দরকার নেই। জেডিকে 9 তে ইতিমধ্যে প্রয়োজনীয় তথ্য রয়েছে যা আপনাকে দুর্ঘটনাক্রমে প্রতীকগুলির সংযোগ থেকে রোধ করতে জেডিকে 7 তে বিদ্যমান ছিল না।

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