Чи можна перейменовувати баночку Maven-залежно?


138

Наразі я використовую збірку jar-with-зависимост, щоб створити таку банку. Однак назва моєї баночки трохи довга.

Оскільки цю банку використовують програми RPG на AS400, я хотів би скоротити її, щоб полегшити життя цим розробникам. Але, крім рук, я не знайшов способу перейменувати баночку зі звичайної project-name-version-classifier-jar-with-dependencies.jar. Мені б хотілося чогось подібногоproject-name-version-classifier-full.jar

Чи все-таки це можна зробити, не в основному копіюючи дескриптор збірки jar-with-зависимост і не називаючи його повним?

Крім того, я хочу продовжувати, щоб jar без зібраного шляху зберігався в сховищі.

Мені потрібні два артефакти. Баночка з моїм класифікатором, що містить регіон, для якого складається. Баночка з усіма залежностями, до якої також входить регіон.

project-name-version-region-full.jarі project-name-version-region.jarповинні зберігатися в сховищі. У першому прикладі класифікатор є повним регіоном, у другому - регіоном. Остання працює.

Відповіді:


227

Ви можете вказати властивість finalName, щоб надати банці потрібне ім'я та вказати, що appendAssemblyId має бути помилковим, щоб уникнути суфікса "jar-with-зависимост".

Наведена нижче конфігурація виведе банку з назвою "test.jar"

<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>

Оновлення: на основі ваших коментарів використання вбудованого дескриптора не працюватиме. Я вважаю, що це зводиться до помилки в останніх версіях збірки-плагіну - вони видалили підтримку класифікаторів, але ідентифікатор виправлено, якщо ви використовуєте вбудований дескриптор, тож ви отримаєте велике ім'я дафта.

Як вирішення, ви можете скопіювати дескриптор складання, який використовується дескриптором jar-with-зависимост, та змінити ідентифікатор.

Цей приклад призведе до того, що ідентифікатор збірки буде доданий до finalName, тому якщо вам потрібно мати ім’я region-full.jar , ви можете вказати finalName як регіон та ідентифікатор збірки як повний . Це призведе до отримання файлу в цілі під назвою region-full.jar, але зауважте, він все одно буде встановлений у сховище Maven у вигляді доданого артефакту з повним використанням як класифікатора. Поки цей ідентифікатор відрізняється від іншого для вашої збірки, не повинно бути зіткнень.

Конфігурація пом буде виглядати приблизно так.

<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>

і jar-Assembly.xml у src / main / Assembly так:

<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>

Робота над цією розробкою Річ. По суті, мені потрібні два артефакти класифікатора для зберігання. При включенні appendAssemblyId у мене було 3 штуки, один без класифікатора, версія класифікатора та версія jar-with-зависимост. при вимкненому appendAssemblyID, jar uber встановлюється у некласифікаційну версію. Мені потрібно, щоб ці хлопці використовували регіональний + повноцінний класифікатор, який говорить, для чого вони побудовані. На жаль, додавання тегу класифікатора не працює.
Майк Корнелл

36

Я думаю, що я знайшов спосіб налаштувати це безпосередньо в пам’яті, не потребуючи окремої jar-Assembly.xml.

Це в основному те саме, що відповідь Річа, за винятком того, що finalName вказано з артефактом і версією.

<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

Завдяки публікаціям тут і деяким копанням у документах Maven, я придумав таку конфігурацію для загальної одноразової перепакованої версії виконуваної баночки з власною назвою.

У 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>

У Assembly.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

Я збираюся надати Річ за те, що він спрямовував мене в правильному напрямку, але хотів опублікувати рішення, яке працювало на мене, оскільки Річ був трохи відключений:

Мій jar-Assembly.xml виглядав приблизно так, що дозволив змінити ідентифікатор зборки для регіону, який зберігався як властивість у моєму профілі:

<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>

Я не використовував параметр finalName у налаштуваннях модуля maven-Assembly-plugin, оскільки цей проект будував мій проект-ім'я-версія-версія-env-full.jar, де env-full був класифікатором.

Уявіть моє здивування, коли я дізнався, що збірка xml може бути параметризована елементами в збірці. Це саме те, що я шукав.


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

Можна також замінити оригінальний файл jar, використовуючи ${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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.