জেডিকে সংস্করণটি কীভাবে নির্দিষ্ট করবেন?
1) <java.version>মাভেন ডকুমেন্টেশনে উল্লেখ করা হয়নি।
এটি একটি স্প্রিং বুট নির্দিষ্টতা।
এটি উভয়টির জন্য জাভা 1.8 নির্দিষ্ট করার জন্য এটির মতো একই সংস্করণ সহ উত্স এবং লক্ষ্য জাভা সংস্করণ সেট করতে দেয়:
<properties>
<java.version>1.8</java.version>
</properties>
আপনি যদি স্প্রিং বুট ব্যবহার করেন তবে নির্দ্বিধায় এটি ব্যবহার করুন।
2) ব্যবহার করতে maven-compiler-pluginবা maven.compiler.source/ maven.compiler.targetবৈশিষ্ট্যগুলি নির্দিষ্ট করতে sourceএবং targetএর সমতুল্য।
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
এবং
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
সংকলক প্লাগইনের ম্যাভেন ডকুমেন্টেশন অনুসারে সমান <source>এবং
যেহেতু <target>সংকলক কনফিগারেশনের উপাদানগুলি বৈশিষ্ট্যগুলি ব্যবহার করে maven.compiler.sourceএবং maven.compiler.targetযদি সেগুলি সংজ্ঞায়িত করা হয়।
উৎস
-sourceজাভা কম্পাইলার জন্য যুক্তি।
ডিফল্ট মান হল: 1.6।
ব্যবহারকারী সম্পত্তি হল: maven.compiler.source।
লক্ষ্য
-targetজাভা কম্পাইলার জন্য যুক্তি।
ডিফল্ট মান হল: 1.6।
ব্যবহারকারী সম্পত্তি হল: maven.compiler.target।
জন্য ডিফল্ট মান সম্পর্কে sourceএবং target, নোট যে
যেহেতু 3.8.0ম্যাভেন কম্পাইলার, ডিফল্ট মান থেকে পরিবর্তিত হয়েছে 1.5থেকে1.6 ।
3) মাভেন-সংকলক-প্লাগইন 3.6এবং পরবর্তী সংস্করণগুলি একটি নতুন উপায় সরবরাহ করে:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>9</release>
</configuration>
</plugin>
আপনি ঠিক ঘোষণা করতে পারেন:
<properties>
<maven.compiler.release>9</maven.compiler.release>
</properties>
তবে এই সময়টি এটি হিসাবে কাজ করবে না maven-compiler-plugin আপনি ডিফল্ট সংস্করণটি ব্যবহার করেন তা সাম্প্রতিক পর্যায়ে যথেষ্ট সংস্করণের উপর নির্ভর করে না।
মাভেন releaseআর্গুমেন্ট জানায় release: একটি নতুন জেভিএম স্ট্যান্ডার্ড বিকল্প যা আমরা জাভা 9 থেকে পাস করতে পারি:
নির্দিষ্ট ভিএম সংস্করণের জন্য সর্বজনীন, সমর্থিত এবং ডকুমেন্টেড এপিআইয়ের বিরুদ্ধে সংকলন করে।
এই উপায়টি source, targetএবং এবং bootstrapজেভিএম বিকল্পগুলির জন্য একই সংস্করণটি নির্দিষ্ট করার জন্য একটি মানক উপায় সরবরাহ করে ।
নোট করুন যে bootstrapক্রস সংকলনের জন্য উল্লেখ করা একটি ভাল অনুশীলন এবং আপনি যদি ক্রস সংকলন না করেন তবে এটির ক্ষতি হবে না।
জেডিকে সংস্করণ নির্দিষ্ট করার সর্বোত্তম উপায় কোনটি?
<java.version>আপনি যদি স্প্রিং বুট ব্যবহার করেন তবে প্রথম উপায় ( ) অনুমোদিত।
জাভা 8 এবং নীচের জন্য:
অন্য দুটি উপায় সম্পর্কে: maven.compiler.source/ maven.compiler.targetবৈশিষ্ট্যের মূল্যায়ন বা ব্যবহার করেmaven-compiler-plugin , আপনি একটি বা অন্যটি ব্যবহার করতে পারেন। শেষ পর্যন্ত দুটি সমাধান একই বৈশিষ্ট্য এবং একই প্রক্রিয়া: মাভেন কোর সংকলক প্লাগইন উপর নির্ভর করে যেহেতু এটি সত্যে কিছুই পরিবর্তন করে না।
ঠিক আছে, আপনার যদি সংকলক প্লাগইনে জাভা সংস্করণগুলির তুলনায় অন্য বৈশিষ্ট্য বা আচরণ নির্দিষ্ট করার প্রয়োজন না হয় তবে এই উপায়টি আরও সংক্ষিপ্ত বলে আরও বেশি অর্থবোধ করে:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
জাভা 9 থেকে:
releaseযুক্তি (তৃতীয় পয়েন্ট) একটি উপায় জোরালোভাবে বিবেচনা করতে আপনি উৎস এবং টার্গেট জন্য একই সংস্করণ ব্যবহার করতে চান হয়।
JAVA_HOME এর JDK এর মধ্যে সংস্করণ এবং pom.xML এ বর্ণিত কোনটির মধ্যে পার্থক্য রয়েছে?
JDK এর দ্বারা রেফারেন্সযুক্ত JAVA_HOMEপোম বর্ণিত সংস্করণের সাথে সামঞ্জস্যপূর্ণ তবে এটি কোনও সমস্যা নয় তবে একটি ভাল ক্রস-সংকলন সামঞ্জস্য নিশ্চিত করার জন্য bootstrapJVM বিকল্পটি যোগ করার বিষয়ে চিন্তা rt.jarকরুনtarget সংস্করণ।
একটি গুরুত্বপূর্ণ বিষয় বিবেচনা করতে হবে তা হল যে sourceএবং targetম্যাভেন কনফিগারেশনের সংস্করণটি দ্বারা বর্ণিত জেডিকে সংস্করণটির চেয়ে সেরা নয় JAVA_HOME।
জেডিকে-র একটি পুরানো সংস্করণ আরও সাম্প্রতিক সংস্করণের সাথে সংকলন করতে পারে না কারণ এটির স্পেসিফিকেশন জানেন না।
ব্যবহৃত জেডিকে অনুসারে উত্স সম্পর্কে তথ্য, লক্ষ্য এবং মুক্ত সংস্করণ প্রকাশের জন্য, জাভা সংকলন: উত্স, লক্ষ্য এবং রিলিজ সমর্থিত সংস্করণগুলি দেখুন ।
জেভিএহোম দ্বারা উল্লিখিত জেডিকে কেস কীভাবে পরিচালনা করবেন জাভা টার্গেট এবং / বা উত্স সংস্করণে পম অনুসারে সামঞ্জস্য নয়?
উদাহরণস্বরূপ, যদি JAVA_HOMEআপনি একটি জেডিকে ১.7 উল্লেখ করে এবং আপনি আপনার পম.এক্সএমএল এর সংকলক কনফিগারেশনে উত্স এবং লক্ষ্য হিসাবে একটি জেডিকে ১.৮ নির্দিষ্ট করে থাকেন তবে এটি একটি সমস্যা হবে কারণ ব্যাখ্যা হিসাবে বলা হয়েছে, জেডিকে ১. doesn't কীভাবে সংকলন করতে জানেন না ।
এর দৃষ্টিকোণ থেকে এটি এটি একটি অজানা জেডিকে সংস্করণ এটি প্রকাশিত হওয়ার পরে এটি প্রকাশিত হয়েছে was
এই ক্ষেত্রে, আপনার এইভাবে জেডিকে নির্দিষ্ট করতে মাভেন সংকলক প্লাগইনটি কনফিগার করা উচিত:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerVersion>1.8</compilerVersion>
<fork>true</fork>
<executable>D:\jdk1.8\bin\javac</executable>
</configuration>
</plugin>
ম্যাভেন সংকলক প্লাগইন সহ উদাহরণগুলিতে আপনার আরও বিশদ থাকতে পারে ।
এটি জিজ্ঞাসা করা হয় না তবে ক্ষেত্রেগুলি যখন আপনি উত্স নির্দিষ্ট করে তবে লক্ষ্য না করে এমন ক্ষেত্রে আরও জটিল হতে পারে। এটি উত্স সংস্করণ অনুযায়ী টার্গেটে ভিন্ন সংস্করণ ব্যবহার করতে পারে। বিধিগুলি বিশেষ: আপনি ক্রস-সংকলন বিকল্প অংশে সেগুলি সম্পর্কে পড়তে পারেন ।
সংকলক প্লাগইনটি কেন packageআপনি পোম.এক্সএমএল এ উল্লেখ না করলেও মাভেন গোলটি কার্যকর করার সময় আউটপুটটিতে ট্রেস করা হয়?
আপনার কোডটি সংকলন করতে এবং সাধারণত সাধারণভাবে কোনও মেভেন লক্ষ্যের জন্য প্রয়োজনীয় সমস্ত কাজ সম্পাদনের জন্য, মাভেনের সরঞ্জাম প্রয়োজন। সুতরাং, কোর ম্যাভেন প্লাগিন ব্যবহার (আপনি একটি কোর ম্যাভেন প্লাগইন চিনতে তার groupId: org.apache.maven.plugins) প্রয়োজন কাজগুলো করুন: সংকলন ক্লাস, পরীক্ষা নির্বাহ জন্য পরীক্ষা প্লাগইন, এবং তাই জন্য ... তাই জন্য কম্পাইলার প্লাগইন, এমনকি যদি আপনি না এই প্লাগইনগুলি ঘোষণা করুন, তারা ম্যাভেন জীবনচক্রের কার্য সম্পাদনের জন্য আবদ্ধ।
আপনার মাভেন প্রকল্পের মূল ডায়ারে আপনি কমান্ডটি চালাতে পারেন: mvn help:effective-pomচূড়ান্ত পম কার্যকরভাবে ব্যবহার করতে। আপনি মাভেন দ্বারা সংযুক্ত প্লাগইনগুলি (আপনার pom.xML এ নির্দিষ্ট বা না) এর সাথে দেখা যেতে পারে, ব্যবহৃত সংস্করণ, তাদের কনফিগারেশন এবং লাইফসাইকেলের প্রতিটি ধাপের জন্য নির্ধারিত লক্ষ্যগুলি সহ আপনি দেখতে পেলেন।
mvn help:effective-pomকমান্ডের আউটপুটে আপনি <build><plugins>উপাদানটির এই মূল প্লাগইনগুলির ঘোষণা দেখতে পেলেন :
...
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>default-clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>default-testResources</id>
<phase>process-test-resources</phase>
<goals>
<goal>testResources</goal>
</goals>
</execution>
<execution>
<id>default-resources</id>
<phase>process-resources</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<id>default-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>default-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
...
মাভেন ডকুমেন্টেশনে ম্যাভেন লাইভসাইলে পরিচয় করিয়ে দেওয়ার বিষয়ে আপনার আরও এই তথ্য থাকতে পারে ।
তবুও, আপনি যখন এই প্লাগইনগুলিকে ডিফল্ট মান হিসাবে অন্য মানগুলির সাথে কনফিগার করতে চান তখন ঘোষণা করতে পারেন (উদাহরণস্বরূপ, আপনি যখন এটি ব্যবহার করার জন্য জেডিকে সংস্করণ সামঞ্জস্য করতে আপনার pom.xML এ মাভেন-কম্পাইলার প্লাগইন ঘোষণা করেছিলেন) বা আপনি যখন করেছিলেন মাভেন জীবনচক্রটিতে ডিফল্টরূপে ব্যবহার না করা কিছু প্লাগইন মৃত্যুদন্ড যুক্ত করতে চান।
<maven.compiler.x>নিয়েছিলাম যে এটি জাভা সংস্করণ ঘোষণার উপায়, এখন থেকে সম্পত্তিটিতে আটকে থাকবে।