CodeGym /Java Course /মডিউল 3 /উন্নত Maven প্রকল্প নির্মাণ

উন্নত Maven প্রকল্প নির্মাণ

মডিউল 3
লেভেল 2 , পাঠ 0
বিদ্যমান

1.1 মাভেনে তৈরি করার জন্য প্লাগইনগুলির তালিকা৷

মাভেনের সমাবেশটি খুব নমনীয়ভাবে কনফিগার করা যেতে পারে। Maven বিকাশকারীরা বিশেষভাবে কয়েক ডজন প্লাগইন তৈরি করেছে, যেগুলি ব্যবহার করে আপনি খুব নমনীয়ভাবে বিভিন্ন বিল্ড কনফিগার করতে পারেন। তাদের মধ্যে সবচেয়ে জনপ্রিয় নীচের টেবিলে দেখানো হয়েছে:

প্লাগ লাগানো বর্ণনা
1 maven-কম্পাইলার-প্লাগইন জাভা সংকলন পরিচালনা করে
2 maven-resources-plugin একটি সমাবেশে সম্পদের অন্তর্ভুক্তি নিয়ন্ত্রণ করে
3 মাভেন সোর্স প্লাগইন সোর্স কোড একটি সমাবেশে অন্তর্ভুক্ত কিনা তা নিয়ন্ত্রণ করে
4 maven-নির্ভরতা-প্লাগইন নির্ভরতা লাইব্রেরি কপি করার প্রক্রিয়া নিয়ন্ত্রণ করে
5 মাভেন-জার-প্লাগইন চূড়ান্ত জার ফাইল তৈরির জন্য প্লাগইন
6 maven যুদ্ধ প্লাগইন চূড়ান্ত যুদ্ধ ফাইল তৈরির জন্য প্লাগইন
7 maven-surefire-plugin টেস্ট রান পরিচালনা করে
8 buildnumber-maven-plugin একটি বিল্ড নম্বর তৈরি করে

প্রতিটি প্লাগইন তার নিজস্ব উপায়ে আকর্ষণীয়, কিন্তু আমাদের তাদের সব বিশ্লেষণ করতে হবে। চলুন মূল জিনিস দিয়ে শুরু করা যাক - সংকলন ব্যবস্থাপনা প্লাগইন।

1.2 কম্পাইলেশন প্লাগইন মাভেন-কম্পাইলার-প্লাগইন

সর্বাধিক জনপ্রিয় প্লাগইন যা আপনাকে কম্পাইলারের সংস্করণ নিয়ন্ত্রণ করতে দেয় এবং প্রায় সমস্ত প্রকল্পে ব্যবহৃত হয় maven-compiler-plugin। এটির ডিফল্ট সেটিংস রয়েছে, তবে প্রায় প্রতিটি প্রকল্পে সেগুলি আবার সেট করতে হবে।

সহজতম সংস্করণে, প্লাগ-ইনটিতে, আপনাকে জাভা সোর্স কোডের সংস্করণ এবং জাভা মেশিনের সংস্করণ উল্লেখ করতে হবে যার অধীনে সমাবেশ করা হয়:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.11</source>
        <target>1.13</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

উপরের উদাহরণে, আমরা তিনটি জাভা কম্পাইলার বিকল্প সেট করেছি: source, targetএবং encoding.

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

অবশেষে, প্যারামিটার encodingআপনাকে জাভা ফাইলের এনকোডিং নির্দিষ্ট করতে দেয়। আমরা ইঙ্গিত করেছি UTF-8। এখন প্রায় সব উৎসই সংরক্ষিত আছে UTF-8। কিন্তু যদি এই প্যারামিটারটি নির্দিষ্ট করা না থাকে, তাহলে অপারেটিং সিস্টেমের বর্তমান এনকোডিং নির্বাচন করা হবে। উইন্ডোজের জন্য, এটি এনকোডিং Windows-1251

এমন কিছু ক্ষেত্রেও আছে যখন বিল্ড কম্পিউটারে জাভা-এর বিভিন্ন সংস্করণ ইনস্টল করা থাকে: বিভিন্ন মডিউল এবং/অথবা বিভিন্ন প্রকল্প তৈরি করতে। এই ক্ষেত্রে, JAVA_HOMEতাদের মধ্যে শুধুমাত্র একটি পথ পরিবর্তনশীল নির্দিষ্ট করা যেতে পারে.

এছাড়াও, জাভা মেশিনের বিভিন্ন বাস্তবায়ন রয়েছে: OpenJDK, OracleJDK, Amazon JDK। এবং বৃহত্তর প্রকল্প, আরো জটিল এর গঠন. কিন্তু আপনি ট্যাগ ব্যবহার করে প্লাগইনটির জন্য javac কম্পাইলারের পথটি স্পষ্টভাবে সেট করতে পারেন . এটি এই উপলক্ষে বিশেষভাবে যোগ করা হয়েছে.

প্লাগইনটির maven-compiler-pluginদুটি লক্ষ্য রয়েছে:

  • compiler:compile- সূত্রের সংকলন, কম্পাইল পর্বের সাথে যুক্ত ডিফল্টরূপে
  • compiler:testCompile- পরীক্ষার সংকলন, ডিফল্টরূপে এটি পরীক্ষা-সংকলন পর্বের সাথে যুক্ত।

আপনি কমান্ড লাইনে javac কম্পাইলারে পাস করার জন্য আর্গুমেন্টের একটি তালিকাও নির্দিষ্ট করতে পারেন:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <compilerArgs>
            <arg>-verbose</arg>
            <arg>-Xlint:all,-options,-path<arg>
        </compilerArgs>
    </configuration>
</plugin>

1.3 জার ফাইল maven-jar-plugin তৈরির জন্য প্লাগইন

আপনি যদি Maven এর সাথে আপনার নিজস্ব জার লাইব্রেরি তৈরি করতে চান, তাহলে আপনার maven-jar-plugin এর প্রয়োজন হবে। এই প্লাগইন অনেক দরকারী জিনিস করে.

যেমন একটি প্লাগইনের একটি উদাহরণ:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <includes>
            <include>**/properties/*</include>
        </includes>
        <archive>
           <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
        </archive>
    </configuration>
</plugin>

প্রথমত, কোন ফাইলগুলি লাইব্রেরিতে যাবে এবং কোনটি যাবে না তা নির্দিষ্ট করতে এটি ব্যবহার করা যেতে পারে। <include>বিভাগে ট্যাগ ব্যবহার করে , <includes>আপনি ডিরেক্টরিগুলির একটি তালিকা নির্দিষ্ট করতে পারেন যার বিষয়বস্তু লাইব্রেরিতে যোগ করতে হবে

দ্বিতীয়ত, প্রতিটি জার একটি ম্যানিফেস্ট ( MANIFEST.MF ফাইল ) থাকতে হবে । প্লাগইনটি নিজেই এটিকে লাইব্রেরিতে সঠিক জায়গায় রাখবে, আপনাকে এটি কোন পথটি নিতে হবে তা নির্দিষ্ট করতে হবে। এর জন্য ট্যাগ ব্যবহার করা হয় <manifestFile>

অবশেষে, প্লাগইন নিজেই একটি ম্যানিফেস্ট তৈরি করতে পারে। এটি করার জন্য, একটি ট্যাগের পরিবর্তে, <manifestFile>আপনাকে একটি ট্যাগ যোগ করতে হবে <manifest>এবং এতে ভবিষ্যতের ম্যানিফেস্টের জন্য ডেটা নির্দিষ্ট করতে হবে। উদাহরণ:

<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.codegym.MainApplication</mainClass>
        </manifest>
    </archive>
</configuration>

<addClasspath>ম্যানিফেস্টে যোগ করতে হবে কিনা তা ট্যাগটি নির্দিষ্ট করে CLASSPATH

ট্যাগ <classpathPrefix>আপনাকে প্রতিটি সম্পদের আগে একটি উপসর্গ (উদাহরণ lib) যোগ করতে দেয়। একটি উপসর্গ নির্দিষ্ট করা <classpathPrefix>আপনাকে একটি পৃথক ফোল্ডারে নির্ভরতা স্থাপন করতে দেয়।

হ্যাঁ, আপনি অন্য লাইব্রেরির ভিতরে লাইব্রেরি রাখতে পারেন। এবং আপনার জন্য অনেক বিস্ময় অপেক্ষা করছে যখন আপনাকে কোথাও প্রপার্টি ফাইলের পাথ পাস করতে হবে, যা জার লাইব্রেরিতে রয়েছে, যা জার লাইব্রেরিতে রয়েছে।

অবশেষে, ট্যাগটি <mainClass>প্রধান এক্সিকিউটেবল ক্লাসের দিকে নির্দেশ করে। " প্রধান এক্সিকিউটেবল ক্লাস কি ? ", - আপনি জিজ্ঞাসা করুন. এবং জিনিস হল যে একটি জাভা মেশিন একটি প্রোগ্রাম চালাতে পারে যা শুধুমাত্র জাভা ক্লাস দ্বারা নয়, একটি জার ফাইল দ্বারাও নির্দিষ্ট করা হয়। এবং এই ক্ষেত্রে প্রধান শুরুর ক্লাস প্রয়োজন।

1.4 বিল্ড নম্বর জেনারেশন প্লাগইন বিল্ড নম্বর-মাভেন-প্লাগইন

প্রায়শই, জার লাইব্রেরি এবং যুদ্ধ ফাইলগুলিতে প্রকল্পের নাম এবং এর সংস্করণ, সেইসাথে সমাবেশের সংস্করণ সহ তথ্য অন্তর্ভুক্ত থাকে। এটি কেবল নির্ভরতা পরিচালনার জন্যই দরকারী নয়, এটি পরীক্ষাকেও সহজ করে: এটি পরিষ্কার যে লাইব্রেরির কোন সংস্করণে ত্রুটিটি সংশোধন করা হয়েছে এবং কোনটিতে এটি যুক্ত করা হয়েছে।

প্রায়শই, এই কাজটি এইভাবে সমাধান করা হয় - তারা একটি বিশেষ ফাইল তৈরি করে application.propertiesযা সমস্ত প্রয়োজনীয় তথ্য ধারণ করে এবং এটি সমাবেশে অন্তর্ভুক্ত করে। আপনি বিল্ড স্ক্রিপ্ট কনফিগার করতে পারেন যাতে এই ফাইল থেকে ডেটা স্থানান্তরিত হয় MANIFEST.MFইত্যাদি।

তবে সবচেয়ে মজার বিষয় হল Maven এর একটি বিশেষ প্লাগইন রয়েছে যা এই ধরনের একটি application.properties ফাইল তৈরি করতে পারে। এটি করার জন্য, আপনাকে এমন একটি ফাইল তৈরি করতে হবে এবং এটি বিশেষ ডেটা টেমপ্লেট দিয়ে পূরণ করতে হবে। উদাহরণ:

# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}

তিনটি প্যারামিটারের মানই বিল্ড স্টেজে প্রতিস্থাপিত হবে।

পরামিতি pom.nameএবং pom.versionসরাসরি থেকে নেওয়া হবে pom.xml। এবং মাভেনে একটি অনন্য বিল্ড নম্বর তৈরি করতে, একটি বিশেষ প্লাগইন রয়েছে - buildnumber-maven-plugin. নীচের উদাহরণ দেখুন:

<packaging>war</packaging>
<version>1.0</version>
<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.2</version>
        <executions>
            <execution>
                <phase>validate</phase>
                <goals>
                    <goal>create</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <revisionOnScmFailure>true</revisionOnScmFailure>
            <format>{0}-{1,date,yyyyMMdd}</format>
            <items>
                 <item>${project.version}</item>
                 <item>timestamp</item>
            </items>
        </configuration>
    </plugin>
</plugins>

উপরের উদাহরণে, তিনটি গুরুত্বপূর্ণ জিনিস ঘটে। প্রথমত, প্লাগইন নিজেই সমাবেশ সংস্করণ সেট করার জন্য নির্দিষ্ট করা হয়েছেদ্বিতীয়ত, এটি নির্দিষ্ট করা হয়েছে যে এটি বৈধকরণ পর্বের সময় চলবে (প্রথম পর্যায়) এবং একটি বিল্ড নম্বর তৈরি করবে - ${buildNumber}.

এবং তৃতীয়ত, এই সমাবেশ নম্বরের বিন্যাসটি নির্দেশিত হয়, যা বিভিন্ন অংশ থেকে একসাথে আঠালো । এটি প্রকল্পের সংস্করণ project.versionএবং টেমপ্লেট দ্বারা প্রদত্ত বর্তমান সময়। টেমপ্লেট বিন্যাস জাভা ক্লাস দ্বারা নির্দিষ্ট করা হয় MessageFormat

মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION