গ্রেডল, "উত্সসংযোগিতা" বনাম "টার্গেটম্প্যাটিবিলিটি"?


130

এর মধ্যে সম্পর্ক / পার্থক্য কী sourceCompatibility এবং targetCompatibility? যখন তারা বিভিন্ন মান সেট করা হয় তখন কী ঘটে?

অনুসারে গ্রেডল ডকুমেন্টেশন :

sourceCompatibility"জাভা উত্সটি সংকলন করার সময় জাভা সংস্করণের সামঞ্জস্যতা।" targetCompatibility"এর জন্য ক্লাস উত্পন্ন করার জন্য জাভা সংস্করণ।"

আমার বোঝা যা targetCompatibilityজাভা বাইটকোড তৈরি করবে যা জাভার নির্দিষ্ট সংস্করণের সাথে সামঞ্জস্যপূর্ণ, এটি কি কার্যকারিতার একটি উপসেট sourceCompatibility?

উত্তর:


80

targetCompatibilityএবং জাভ্যাক এবং এর মধ্যে sourceCompatibilityমানচিত্র । উত্সটি মূলত উত্স ভাষার স্তর এবং লক্ষ্যটি বাইটকোডের স্তর যা উত্পন্ন হয়।-target release-source release

জাভ্যাক ক্রস সংকলন বিভাগে আরও বিশদ পাওয়া যাবে ।


1
উপরের লিঙ্কটি জাভা for এর জন্য ডকটির দিকে ইঙ্গিত করছে I আমি অবাক হয়েছি আপনি যদি ডকস.ওরাকল.ইন / জাভা / জাভাসে / ১১ / টোলেস / এর মতো কিছু চান ?
ব্রায়ান অগ্নিউ

62

আপনি এগুলি ব্যবহার করার সময় সাবধান হন; মানুষ অনুমান করে আমাদের কামড়েছে।

আপনি 1.5 এর সোর্স কমপ্যাবিলিটি (বা টার্গেটকম্প্যাটিবিলিটি) ব্যবহার করার অর্থ এই নয় যে আপনি সর্বদা আপনার কোডটি জেডিকে 1.6 এর সাথে সংকলন করতে পারবেন এবং এটি জেডিকে 1.5 এর অধীনে কাজ করার আশা করতে পারে। ইস্যুটি উপলব্ধ গ্রন্থাগারগুলির।

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

এই কারণে, আমি সর্বদা সামঞ্জস্যতা সেটিংটি তুলনা করি আমি যে জাভা সংস্করণের অধীনে তৈরি করছি তার সাথে। যদি তারা মেলে না তবে আমি বিল্ডটি ব্যর্থ।


4
এটি একটি সূক্ষ্ম, তবে খুব গুরুত্বপূর্ণ পর্যবেক্ষণ।
ন্যাটিক্স

আপনি কিভাবে তাদের তুলনা করবেন?
শূন্য01 আলফা

কেন আপনি বিল্ড ব্যর্থ? "বুটস্ট্র্যাপ শ্রেণিপথ" বিকল্পটি কেবল এই সমস্যাটি প্রশমিত করার জন্য দেওয়া হয়েছে। আপনি সর্বদা যথাযথ বুটস্ট্র্যাপ ব্যবহার করতে পারেন এবং এটি ঠিক কাজ করা উচিত।
কোডবেন্ডার

6
if(JavaVersion.current() != JavaVersion.VERSION_1_8) throw new GradleException("This project requires Java 8, but it's running on "+JavaVersion.current())বিল্ডড্র্যাডল ফাইলের শুরুতে, আমি এইভাবেই এই সমস্যাটিকে বাছাই করেছি।
জেরাস

2
জাভা 9 এর পরে এখন কেবলমাত্র জাভা সংস্করণে উপলব্ধ API ব্যবহারের অনুমতি দিয়ে এই সমস্যাটির সমাধানের উদ্দেশ্যে একটি নতুন javacবিকল্প রয়েছে --release। এই সম্পর্কে আরও তথ্যের জন্য stackoverflow.com/a/43103038/4653517 দেখুন
জেমস মুড

35

সোর্স কম্প্যাটিবিলিটি = জাভা ফাইলগুলি সংকলন করতে জাভা প্রোগ্রামিং ভাষার যে সংস্করণটি ব্যবহার করা হবে তা নির্দিষ্ট করে। উদাহরণস্বরূপ সোর্স কম্প্যাটিবিলিটি 1.6 = জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজের 1.6 সংস্করণটি জাভা ফাইলগুলি সংকলন করতে ব্যবহৃত হবে তা নির্দিষ্ট করে।

ডিফল্ট উত্স অনুসারে সামঞ্জস্যতা = "বর্তমানের জেভিএম ব্যবহারের সংস্করণ" এবং লক্ষ্যসংশ্লিষ্টতা = উত্স সামঞ্জস্যতা

টার্গেটম্প্যাটিবিলিটি = বিকল্পটি নিশ্চিত করে যে উত্পন্ন শ্রেণিবদ্ধ ফাইলগুলি টার্গেটম্পোটিবিলিটি দ্বারা নির্দিষ্ট করা ভিএমগুলির সাথে সামঞ্জস্যপূর্ণ। মনে রাখবেন যে বেশিরভাগ ক্ষেত্রে--র বিকল্পের মান হ'ল-উত্স বিকল্পের মান; সেক্ষেত্রে আপনি-টার্গেট বিকল্পটি বাদ দিতে পারেন।

ক্লাস ফাইলগুলি টার্গেটম্প্যাটিবিলিটি এবং পরবর্তী সংস্করণগুলিতে নির্দিষ্ট করা টার্গেটে চলবে, তবে ভিএম এর পূর্ববর্তী সংস্করণগুলিতে নয়


আমাদের প্রকল্পটি কোনটি ব্যবহার করছে তা আমরা কীভাবে আবিষ্কার করব?
is জুলিয়ান00

0

আমার মতে, "সোর্স কমপ্যাটিবিলিটি" অর্থ আপনার উত্স কোডে আপনি কী বৈশিষ্ট্যটি ব্যবহার করতে পারেন example উদাহরণস্বরূপ, আপনি যদি সোর্স কম্পোটিবিলিটি 1.7 তে সেট করেন তবে আপনি ল্যাম্বডা এক্সপ্রেশনটি ব্যবহার করতে পারবেন না যা জাভা 8-তে একটি নতুন বৈশিষ্ট্য রয়েছে যদিও আপনি জেডিকে সংস্করণ হ'ল 1.8।
"টার্গেটকম্প্যাটিবিলিটি" হিসাবে, এর অর্থ জেনারেটেড ক্লাস ফাইলটি যে জেআর এর কোন সংস্করণ চালু থাকতে পারে, আপনি যদি এটি 1.8 তে সেট করেন তবে এটি জেডিকে 1.7 এ সফলভাবে চলতে পারে না, তবে এটি সাধারণত জেডিকে উচ্চতর সংস্করণে চলতে পারে।


0

এগুলি জাভাক কমান্ডের পতাকা are

javac [options] [sourcefiles]

Options:
...
-source release - Specifies the version of source code accepted.
...
-target release - Generates class files for a specific VM version.
...

অন্য কথায়: আপনি একটি sourceসংস্করণে একটি কোড লিখুন এবং আপনার ক্লাসগুলি targetভিএম সংস্করণে সংকলন করুন । এটি চালানোর জন্য যেমন পুরানো জাভা সংস্করণ সহ অন্যান্য ওয়ার্কস্টেশনতে।

অনুসারে: https://docs.oracle.com/en/java/javase/11/tools/javac.html

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