জার আর্টিক্টের মেভেন চূড়ান্ত নাম নিয়ন্ত্রণ করা


174

আমি আমাদের সুপার পোমে একটি সম্পত্তি সংজ্ঞায়নের চেষ্টা করছি যা সমস্ত শিশু প্রকল্পগুলি উত্পাদিত নিদর্শনগুলির গন্তব্য হিসাবে ব্যবহার করবে।

এর জন্য আমি এটি ব্যবহার করার বিষয়ে ভাবছিলাম project/build/finalNameকিন্তু এটি সাধারণ পোমগুলির জন্যও কাজ বলে মনে হয় না:

হুকুম

 mvn archetype:create \ 
   -DarchetypeGroupId=org.apache.maven.archetypes \
   -DgroupId=com.mycompany.app \
   -DartifactId=my-app

খুলুন POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>my-app</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <build>
        <finalName>${project.name}-testing</finalName>
  </build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

এবং যখন আমি মৃত্যুদন্ড কার্যকর করেছি:

$ mvn install

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app
[INFO]    task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /tmp/mvn_test/my-app/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] [install:install {execution: default-install}]
[INFO] Installing /tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sun Nov 21 18:37:02 IST 2010
[INFO] Final Memory: 17M/162M
[INFO] ------------------------------------------------------------------------

আমি প্রত্যাশা করব "টেস্টিং" স্ট্রিংটি উত্পন্ন আর্টিক্যাক্ট নামের কোথাও উপস্থিত হবে।

আমি কি "ফাইনালনাম" এর উদ্দেশ্যটি ভুল বুঝছি?


জেনে ভালো লাগলো
Andrejs

উত্তর:


291

আপনি finalNameপ্লাগইন কনফিগারেশন বিভাগে সম্পত্তি সেট করেছেন :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <finalName>myJar</finalName>                   
    </configuration>
</plugin>       

সরকারী নথিতে ইঙ্গিত হিসাবে ।

হালনাগাদ:

ম্যাভেন> = 3 এর জন্য

ম্যাথিউর মন্তব্যের ভিত্তিতে আপনি এখন এটি এর মতো করতে পারেন:

 <packaging>jar</packaging>
 <build>
   <finalName>WhatEverYouLikey</finalName>
 </build>

দেখুন বাগ রিপোর্ট / ডকুমেন্টেশন


2
আপনি কি কমান্ড লাইনে "ফাইনালনেম" নির্দিষ্ট করতে পারবেন? (-ডজার.ফাইনালনাম = এক্স) কাজ করে না বলে মনে হচ্ছে।
jayunit100

আমি কমান্ড লাইনটি ব্যবহার করার চেষ্টা করিনি। আপনি কি ম্যাভেন সমাধানটি ব্যবহার করে দেখেছেন?
খ্রিস্টান ভাইলমা

1
একটি আপডেটের কিছুটা, ২.৪ হ'ল সর্বশেষতম সংস্করণ। এখনও ভাল কাজ করে।
পলবিজিডি

1
মাভেন প্লাগইনগুলির সাথে একটিতে সংস্করণ অন্তর্ভুক্ত করতে হবে না। আমি ধরে নিলাম এটি সর্বশেষে তুলে ধরেছে। যদি কেউ ভেবে দেখেছেন হয়েছে, বয়াম নাম ছাড়া ফাইল প্রত্যয়, তাই কোন হিসাবে এটি সঠিকভাবে উদাহরণে দেখানো হয় "myJar.jar" কিন্তু "myJar"।
এস্পিনোসা

13
সংস্করণ 3.0.0 হিসাবে finalNameকনফিগারেশন সরানো হয়েছে। তবে ওপির পদ্ধতিটি কাজ করা উচিত। দেখুন issues.apache.org/jira/browse/MJAR-233
ম্যাথু

42

প্রদত্ত সমস্ত উত্তর প্রয়োজনের চেয়ে জটিল। ধরে নিই যে আপনি একটি জার ফাইল তৈরি করছেন, আপনাকে যা করতে হবে তা হ'ল <jar.finalName>আপনার <properties>বিভাগে একটি ট্যাগ যুক্ত করুন :

<properties>
    <jar.finalName>${project.name}</jar.finalName>
</properties>

এটি একটি জার তৈরি করবে:

project/target/${project.name}.jar

এটি নথিতে রয়েছে - নোট করুন User Property:

finalName:
Name of the generated JAR.
Type: java.lang.String
Required: No
User Property: jar.finalName
Default: ${project.build.finalName}

কমান্ড লাইন ব্যবহার

আপনি কমান্ড লাইনে এই বিকল্পটি ব্যবহার করতে সক্ষম হবেন:

mvn -Djar.finalName=myCustomName ...

আপনার আমার কাস্টমনাম.জার পাওয়া উচিত, যদিও আমি এটি পরীক্ষা করে নিই।


6
স্প্রিং বুটের সাথে এটি স্ট্যাকওভারফ্লো . com/a/14490656/2294031 হিসাবে কাজ করে না । যেখানে <jar.finalName>foo</jar.finalName>দুটি জার তৈরি করা হয়: নাম foo-${project.version}.jarনির্ধারিত নির্ভরতা সহ একটি এক্সিকিউটেবল জার এবং কেবলমাত্র প্রকল্পের নাম সম্বলিত একটি দ্বিতীয় জার ${project.name}-${project.version}.jar, <build><finalName>foo</finalName></build>foo.jar
নামমাত্র

ওয়ার্কস এবং আমি সম্মতি জানাই এটির সহজ উত্তর এবং আপনি <jar.finalName> $ {groupId} - $ {আর্টিফ্যাক্টআইডি} - {{সংস্করণ} </ jar.finalName>
এমজি বিকাশকারী

37

@ ম্যাক্সিম এটি
চেষ্টা করুন ...

pom.xml

 <groupId>org.opensource</groupId>
 <artifactId>base</artifactId>
 <version>1.0.0.SNAPSHOT</version>

  ..............
<properties>
    <my.version>4.0.8.8</my.version>
</properties>

<build>
    <finalName>my-base-project</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <phase>install</phase>
                    <configuration>
                        <file>${project.build.finalName}.${project.packaging}</file>
                        <generatePom>false</generatePom>
                        <pomFile>pom.xml</pomFile>
                        <version>${my.version}</version>
                    </configuration>
                </execution>
            </executions>
        </plugin>
</plugins>
</build>

Commnad mvn clean install

আউটপুট

[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ base ---
[INFO] Building jar: D:\dev\project\base\target\my-base-project.jar
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ base ---
[INFO] Installing D:\dev\project\base\target\my-base-project.jar to H:\dev\.m2\repository\org\opensource\base\1.0.0.SNAPSHOT\base-1.0.0.SNAPSHOT.jar
[INFO] Installing D:\dev\project\base\pom.xml to H:\dev\.m2\repository\org\opensource\base\1.0.0.SNAPSHOT\base-1.0.0.SNAPSHOT.pom
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install-file (default) @ base ---
[INFO] Installing D:\dev\project\base\my-base-project.jar to H:\dev\.m2\repository\org\opensource\base\4.0.8.8\base-4.0.8.8.jar
[INFO] Installing D:\dev\project\base\pom.xml to H:\dev\.m2\repository\org\opensource\base\4.0.8.8\base-4.0.8.8.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------


উল্লেখ


5
আমার ক্ষেত্রে, <ফাইল> <file> to {build.directory} / $ {project.build.finalName}। $ {প্রকল্প.প্যাকেজিং} </file>
সিপিটি হতে হয়েছিল। সেনকফাস

2
সরাসরি মেভেন-ইনস্টল-প্লাগইন ভিএস মাভেন-জার-প্লাগইনে ফাইনালনেম ট্যাগ লাগানোর মধ্যে পার্থক্য কী?
পকেটকিড 2

এটি দুর্দান্ত, আমি একটি কৌশল হিসাবে সরাসরি .xML ফাইল প্রকাশ করতে এই কৌশলটি ব্যবহার করতে সক্ষম হয়েছি।
বেনিয়ামিন ড্যাম

1
এটি প্রথম বেস -১.০.০.SNAPSHOT.jar এবং তারপরে বেস -৯.০.৮.৮.জার?
ডাব্লু

1
দু'টি ভিন্ন নামের সাথে শিল্পকর্মটি কেন ইনস্টল করা হয়েছে? এটি একবার ইনস্টল করার জন্য দয়া করে একটি কনফিগারেশন দেখান।
ক্রিসিনমটাউন

18

প্যাকেজ পর্যায়ে, প্লাগইন ফাইল ম্যাপিংয়ের মাধ্যমে আমদানি করা ফাইলের নামগুলির কনফিগারেশনকে মঞ্জুরি দেয়:

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

http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.7</version>
    <configuration>
       [...]
        <fileNameMapping>full</fileNameMapping>
    </configuration>
</plugin>

http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#outputFileNameMapping

আপনি যদি কোনও সংস্করণ বা কোনও কিছুর মাধ্যমে আপনার সংস্করণটিকে 'টেস্টিং' হিসাবে কনফিগার করেছেন তবে এটি যুদ্ধ প্যাকেজের জন্য কাজ করবে:

ম্যাভেন War-প্লাগইন

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <encoding>UTF-8</encoding>                        
        <outputFileNameMapping>@{groupId}@-@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
    </configuration>
</plugin>

1
এবং একটি জার সংরক্ষণাগার জন্য?
স্টিফেন


3

আপনি যে পদ্ধতিটি ব্যবহার করছেন প্রকৃতপক্ষে তার নামে একটি স্ট্রিং 'টেস্টিং' দিয়ে জার ফাইলটি তৈরি করে, যেমনটি আপনি নির্দিষ্ট করেছেন তবে ডিফল্ট ইনস্টল কমান্ড এটি আপনার ~ / .m2 / সংগ্রহস্থল ডিরেক্টরিতে প্রেরণ করে, যেমন এই আউটপুট লাইনে দেখা গেছে:

/tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar

আমার কাছে মনে হচ্ছে আপনি এই জাতীয় নাম দিয়ে একটি জার তৈরি করার চেষ্টা করছেন এবং তারপরে এটি আপনার পছন্দের ডিরেক্টরিতে অনুলিপি করছেন।

যেমন এখানে বর্ণিত outputDirectory সম্পত্তি ব্যবহার করার চেষ্টা করুন: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html


প্রকৃতপক্ষে, আমার সম্পূর্ণ সেটআপটি নিম্নলিখিত: আমার সুপারপোম রয়েছে যাতে আমি যে বর্তমান সংস্করণটি তৈরি করছি তার সংজ্ঞা দিতে চাই। তারপরে আমার কাছে বেশ কয়েকটি প্রকল্প রয়েছে যা এই পোমকে তাদের পিতামাতা হিসাবে সংজ্ঞায়িত করে। আমি এই সমস্ত প্রকল্পগুলি তৈরি করতে হডসন-সিআই ব্যবহার করি। তারপরে হডসন প্রকল্পগুলিকে কারুকারীর দিকে ঠেলে দেয়। আমি এমন কিছু সন্ধান করছি যা আমাকে বর্তমানে নির্মিত সংস্করণটি পরিবর্তন করতে দেয়। আমি কীভাবে আপনার নতুন ইনপুটটি ব্যবহার করতে পারি সে সম্পর্কে আমার নজর থাকবে। ধন্যবাদ.
ম্যাক্সিম ভেক্সলার

সুতরাং ... ইনস্টল করা সংস্করণটি নিয়ন্ত্রণ করার জন্য আমার একটি আলাদা মাভেন প্যারামিটার ওভাররাইড করা দরকার?
ম্যাক্সিম ভেক্সলার

7
এটি সঠিক নয়। স্থানীয় রেপো নাম স্বাভাবিক হয়: groupId/artifactId/version/artifactId-version-classifier.packaging। ফাইনালনেম কেবল আউটপুট ডিরেক্টরিতে স্থানীয় ফাইলের নামের ক্ষেত্রে প্রযোজ্য।
সান প্যাট্রিক ফ্লয়েড

লক্ষ্য করার জন্য ধন্যবাদ। আসলে, আমি যে লাইনটি উদ্ধৃত করেছি তা আমার ত্রুটি দেখায়। যাইহোক, আমি অনুভূতিটি পেয়েছি যে ম্যাক্সিমের যা প্রয়োজন তা ছিল স্থানীয় ডিরেক্টরিতে (তার পছন্দসই) জার।
গোরান জোভিক

@ সানপ্যাট্রিকফ্লাইড তাই আর্টফ্যাক্ট আইড-ভার্সন-ক্লাসিফায়ার.প্যাকেজিং কে কাটম নাম পরিবর্তন করার কোনও উপায় আছে কি?
খালিদ আবু এল-সৌদ 11'14

2

আমি নিম্নলিখিত ব্যবহার করছি

        ....
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <finalName>${project.groupId}/${project.artifactId}-${baseVersion}.${monthlyVersion}.${instanceVersion}</finalName>
            </configuration>
        </plugin>
        ....

এইভাবে আপনি প্রতিটি মান পৃথকভাবে বা অন্য কোনও সিস্টেমের জেনকিন্স থেকে ব্যবহারগতভাবে সংজ্ঞায়িত করতে পারেন।

mvn package -DbaseVersion=1 -monthlyVersion=2 -instanceVersion=3

এটি একটি ফোল্ডার স্থাপন করবে target\{group.id}\projectName-1.2.3.jar

সময় বাঁচানোর আরও ভাল উপায় হতে পারে

        ....
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <finalName>${project.groupId}/${project.artifactId}-${baseVersion}</finalName>
            </configuration>
        </plugin>
        ....

আমি ভেরিয়েবলের ব্যবহার বাদে একই পছন্দ করি।

  mvn package -DbaseVersion=0.3.4

এটি একটি ফোল্ডার স্থাপন করবে target\{group.id}\projectName-1.2.3.jar

আপনি প্যাকেজটি অবস্থিত হতে পারে এমন কোনও অবস্থান নির্দিষ্ট করতে outputDirectoryঅভ্যন্তর ব্যবহার configurationকরতে পারেন।


1

আমার প্রথম সংস্করণ প্রকল্পে আমি ব্যবহার করছি:

<build>
    <finalName>shop</finalName>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>${maven.war.version}</version>
            <configuration><webappDirectory>${project.build.directory}/${project.build.finalName}     </webappDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.