নির্ভরশীলতার সাথে একটি মাভেন জার নামকরণ করা কি সম্ভব?


138

আমি বর্তমানে জারের সাথে নির্ভরশীলতার সমাবেশটি ব্যবহার করছি এরকম জার তৈরি করতে। তবে আমার জারের নামটি কিছুটা দীর্ঘ।

যেহেতু এই জারটি একটি এসপি 400 এ আরপিজি প্রোগ্রামগুলি ব্যবহার করছে, তাই আমি এই বিকাশকারীদের জীবনকে আরও সহজ করার জন্য এটি ছোট করতে চাই। তবে, হাতছাড়া, আমি জার থেকে নাম পরিবর্তন করার কোনও উপায় খুঁজে পাই না project-name-version-classifier-jar-with-dependencies.jar। আমি কিছু পছন্দ করিproject-name-version-classifier-full.jar

মূলত জার-নির্ভর-নির্ভরতা অ্যাসেম্বলি বর্ণনাকারীকে অনুলিপি না করে এবং এটিকে পূর্ণ কল না করে কী কী করা যায়?

অতিরিক্তভাবে, আমি ক্লাসপথটি সংগ্রহস্থলে জমা না করে জারটি চালিয়ে যেতে চাই।

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

project-name-version-region-full.jarএবং project-name-version-region.jarসংগ্রহস্থল মধ্যে সংরক্ষণ করা উচিত। প্রথম উদাহরণে শ্রেণিবদ্ধটি অঞ্চল-পূর্ণ, দ্বিতীয় অঞ্চলে এটি অঞ্চল। পরেরটি কাজ করছে।

উত্তর:


227

আপনি জারটিকে যে নামটি চান তার নাম দেওয়ার জন্য আপনি চূড়ান্ত নাম বৈশিষ্ট্যটি নির্দিষ্ট করতে পারেন, এবং নির্দিষ্ট করে দিতে পারেন যে "জার-নির্ভর-নির্ভরতা" প্রত্যয়টি এড়াতে এপেন্ডএশ্যাপিডআইডটি মিথ্যা হওয়া উচিত।

নীচের কনফিগারেশনটি "টেস্ট.জার" নামে একটি জার আউটপুট দেবে

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>test</finalName>
        <appendAssemblyId>false</appendAssemblyId>
      </configuration>
    </execution>
  </executions>
</plugin>

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

কার্যকারণ হিসাবে, আপনি জার-নির্ভর-নির্ভরতা বর্ণনাকারী দ্বারা ব্যবহৃত অ্যাসেম্বলি বর্ণনাকারী অনুলিপি করতে পারেন এবং আইডি সংশোধন করতে পারেন।

এই উদাহরণটিতে সমাবেশ আইডি finalName সংযোজন হচ্ছে স্থাপিত হবে, তাই আপনি যদি একটি নাম থাকতে হবে অঞ্চল-full.jar , আপনি finalName নির্দিষ্ট করতে পারেন অঞ্চল এবং সমাবেশ আইডি পূর্ণ । এটি অঞ্চল-পূর্ণ.জার নামে টার্গেটে কোনও ফাইলের ফলস্বরূপ ঘটবে, তবে নোট করুন যে এটি এখনও শ্রেণিবদ্ধ হিসাবে পুরো ব্যবহৃত সঙ্গে সংযুক্ত আর্টিফ্যাক্ট হিসাবে ম্যাভেন সংগ্রহস্থলে ইনস্টল করা হবে । যতক্ষণ না এই আইডিটি অন্য আপনার সমাবেশের পক্ষে আলাদা হয় তবে কোনও সংঘর্ষ হওয়া উচিত নয়।

পম কনফিগারেশনটি দেখতে এটির মতো হবে।

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptors>
          <descriptor>src/main/assembly/jar-assembly.xml</descriptor>
        </descriptors>
        <finalName>region</finalName>
      </configuration>
    </execution>
  </executions>
</plugin>

এবং এসআরসি / প্রধান / সমাবেশে জার-এসেম্বলি.এক্সএমএল:

<assembly>
  <id>full</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
    </fileSet>
  </fileSets>
</assembly>

সেই বিস্তৃতি সমৃদ্ধ উপর কাজ করে। মূলত, আমার দুটি শ্রেণিবদ্ধ নিদর্শনগুলি সঞ্চয় করতে হবে। অ্যাপেন্ডএশ্যাপিডআইড চালু করার সাথে আমার 3 টি শিল্পকর্ম ছিল, একটি ক্লাসিফায়ারবিহীন একটি, শ্রেণিবদ্ধ সংস্করণ, এবং জার-নির্ভর নির্ভরতার সংস্করণ। অ্যাপেনডএশ্যাপিআইডি বন্ধ করে দিয়ে উবার জারটি নন-শ্রেণিবদ্ধ সংস্করণে ইনস্টল করা আছে। আমার এই ছেলেরা এমন একটি অঞ্চল + সম্পূর্ণ ভিত্তিক শ্রেণিবদ্ধ যা তাদের জন্য তৈরি হয়েছিল তা ব্যবহার করা উচিত। দুর্ভাগ্যক্রমে শ্রেণিবদ্ধ ট্যাগ যুক্ত করা কার্যকর হয় না।
মাইক কর্নেল

36

আমি মনে করি যে এটি আলাদা জার-এসেম্বলি.এক্সএমএল প্রয়োজন না করে সরাসরি পম এ কনফিগার করার একটি উপায় খুঁজে পেয়েছি।

এটি মূলত সমৃদ্ধের উত্তর হিসাবে একই, চূড়ান্ত নাম ব্যতীত আর্টফ্যাক্টআইডি এবং সংস্করণ সহ নির্দিষ্ট করা হয়।

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>${project.artifactId}-${project.version}-full</finalName>
        <appendAssemblyId>false</appendAssemblyId>
        <archive>
            <manifest>
                <mainClass>com.mycompany.MyMainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-my-jar-with-dependenciess</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

8

পোস্ট এখানে এবং কিছু খনক ধন্যবাদ ম্যাভেন ডক্স আমি একটি সাধারণ এককালীন জন্য নিম্নলিখিত কনফিগারেশন সঙ্গে আসা পর্যন্ত থাকেন একটি কাস্টম নাম দিয়ে সমাবেশ এক্সিকিউটেবল বয়াম repacked।

Pom.xML এ:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <id>exe</id>
            <phase>package</phase>
            <goals><goal>single</goal></goals>
            <configuration>
                <finalName>MyJarName</finalName>
                <attach>false</attach>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                    <descriptor>assembly.xml</descriptor>
                </descriptors>
                <archive>
                    <manifest>
                        <mainClass>karlthepagain.MyMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

সমাবেশ.xml এ:

<assembly>
    <id>exe</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <unpack>true</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
</assembly>

এটি MyJarName.jarতার সমস্ত নির্ভরতাগুলির সাথে একই পাত্রে পুনরায় প্যাকেজড এবং নির্দিষ্ট করে উত্পন্ন করবে Main-Class: karlthepagain.MyMain


3

আমাকে সঠিক দিকের দিকে নির্দেশ করার জন্য আমি রিচকে কৃতিত্ব দিতে চলেছি, তবে রিচ এর সামান্য দূরে থাকায় যে সমাধানটি আমার পক্ষে কাজ করেছে তা পোস্ট করতে চেয়েছিলাম:

আমার জার-এসেম্বলি.এক্সএমএল দেখে মনে হয়েছিল যা আমার প্রোফাইলে সম্পত্তি হিসাবে সঞ্চিত এই অঞ্চলটির জন্য এসেম্বলি আইডি পরিবর্তন করতে দেয়:

<assembly>
  <id>${env}-full</id>
    <formats>
      <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
      <dependencySet>
        <unpack>true</unpack>
        <scope>runtime</scope>
      </dependencySet>
    </dependencySets>
    <fileSets>
      <fileSet>
        <directory>${project.build.outputDirectory}</directory>
      </fileSet>
    </fileSets>
</assembly>

আমি মাভেন-অ্যাসেম্বলি-প্লাগইন সেটিংসে চূড়ান্ত নাম প্যারামিটারটি ব্যবহার করিনি কারণ এটি আমার প্রকল্প-নাম-সংস্করণ-এনভ-ফুল.জার নাম দিয়ে আমার প্রকল্প তৈরি করেছে যেখানে এনভির পূর্ণ ছিল শ্রেণিবদ্ধ।

আমার বিস্ময়ের কল্পনা করুন যখন আমি শিখেছি সমাবেশের এক্সএমএল বিল্ডের আইটেমগুলির মাধ্যমে প্যারামিটারাইজ করা যেতে পারে। এটি ঠিক আমি যা খুঁজছিলাম ছিল।


2

এটি আমার পক্ষে কাজ করেছে

<build>
    <finalName>anynameyoulike</finalName>
    <plugins>           
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>                   
                <appendAssemblyId>false</appendAssemblyId>
                <archive>
                    <manifest>
                        <mainClass>com.mycompany.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

1

${project.build.finalName}চূড়ান্ত নাম হিসাবে ব্যবহার করে মূল জার ফাইলটি ওভাররাইট করাও সম্ভব :

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
   <executions>
      <execution>
          <phase>package</phase>
          <goals>
             <goal>single</goal>
          </goals>
      </execution>
   </executions>
   <configuration>
     <descriptorRefs>
       <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
     <finalName>${project.build.finalName}</finalName>
     <appendAssemblyId>false</appendAssemblyId>
   </configuration>
 </plugin>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.