Có thể đổi tên một maven jar-với-phụ thuộc?


138

Tôi hiện đang sử dụng cụm jar-with-phụ thuộc để tạo ra một jar như vậy. Tuy nhiên, tên của bình của tôi hơi dài.

Vì chiếc bình này đang được các chương trình RPG sử dụng trên AS400, nên tôi muốn rút ngắn nó để làm cho cuộc sống dễ dàng hơn một chút cho những nhà phát triển đó. Nhưng, ngoài việc bằng tay, tôi đã không tìm được cách đổi tên bình từ thông thường project-name-version-classifier-jar-with-dependencies.jar. Tôi muốn một cái gì đó nhưproject-name-version-classifier-full.jar

Có cách nào để làm điều này mà không cần sao chép mô tả lắp ráp jar-with-phụ thuộc và gọi nó là đầy đủ không?

Ngoài ra, tôi muốn tiếp tục có jar mà không có đường dẫn được lắp ráp được lưu trữ trong kho lưu trữ.

Tôi cần hai cổ vật. Các jar với phân loại của tôi giữ khu vực mà bản dựng dành cho. Các jar với tất cả các phụ thuộc cũng bao gồm khu vực.

project-name-version-region-full.jarproject-name-version-region.jarnên được lưu trữ trong kho lưu trữ. Trong ví dụ đầu tiên, bộ phân loại có đầy đủ vùng, trong vùng thứ 2. Sau này đang làm việc.

Câu trả lời:


227

Bạn có thể chỉ định thuộc tính FinalName để đặt tên jar mà bạn muốn và chỉ định rằng appendAss lanhId phải là sai để tránh hậu tố "jar-with- Depencies ".

Cấu hình bên dưới sẽ xuất ra một tệp có tên "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>

Cập nhật: dựa trên nhận xét của bạn, sử dụng bộ mô tả tích hợp sẽ không hoạt động. Tôi tin rằng đây là một lỗi trong các phiên bản gần đây của plugin lắp ráp - họ đã xóa hỗ trợ cho các trình phân loại, nhưng id đã được sửa nếu bạn sử dụng một mô tả tích hợp, do đó bạn kết thúc bằng một tên giả lớn.

Như một giải pháp thay thế, bạn có thể sao chép bộ mô tả lắp ráp được sử dụng bởi bộ mô tả jar-with-phụ thuộc và sửa đổi id.

Ví dụ này sẽ dẫn đến id tập hợp được gắn vào tên cuối cùng, vì vậy nếu bạn cần có tên của vùng-full.jar , bạn có thể chỉ định tên cuối cùng là vùng và id lắp ráp là đầy đủ . Điều này sẽ dẫn đến một tệp trong mục tiêu được gọi là area-full.jar, nhưng lưu ý rằng nó vẫn sẽ được cài đặt vào kho lưu trữ Maven dưới dạng một tạo phẩm đính kèm với đầy đủ được sử dụng làm trình phân loại. Miễn là id này khác với id cho hội đồng khác của bạn, không nên có xung đột.

Cấu hình pom sẽ như thế này.

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

và jar-assembly.xml trong src / main / assembly như thế này:

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

Làm việc trên công phu đó. Về cơ bản, tôi cần hai tạo phẩm phân loại được lưu trữ. Khi appendAssuggingId được bật, tôi có 3 artifacts, một không có bộ phân loại, phiên bản phân loại và phiên bản jar-with-phụ thuộc. với appendAssuggingID đã tắt jar uber được cài đặt vào phiên bản không phân loại. Tôi cần phải có những kẻ này sử dụng một phân loại dựa trên khu vực + đầy đủ cho biết nơi chúng được xây dựng cho. Thật không may, việc thêm thẻ phân loại không hoạt động.
Mike Cornell

36

Tôi nghĩ rằng tôi đã tìm thấy một cách để định cấu hình điều này trực tiếp trong pom mà không cần một jar-assembly.xml riêng.

Về cơ bản, nó giống như câu trả lời của Rich, ngoại trừ tên cuối cùng được chỉ định với artifactId và phiên bản.

<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

Nhờ các bài đăng ở đây và một số tài liệu về maven tôi đã đưa ra cấu hình sau đây cho một cụm jar thực thi được đóng gói lại một lần với tên tùy chỉnh.

Trong tệp 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>

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

Điều này sẽ tạo ra MyJarName.jarvới tất cả các phụ thuộc của nó được đóng gói lại vào cùng một bình và được chỉ định Main-Class: karlthepagain.MyMain.


3

Tôi sẽ cung cấp cho Rich tín dụng vì đã chỉ cho tôi đi đúng hướng, nhưng muốn đăng giải pháp hiệu quả cho tôi vì Rich đã hơi tắt:

Jar-assembly.xml của tôi trông như thế này cho phép id lắp ráp thay đổi cho vùng được lưu trữ dưới dạng một thuộc tính trong hồ sơ của tôi:

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

Tôi đã không sử dụng tham số FinalName trong cài đặt maven-assembly-plugin vì điều này đã xây dựng dự án của tôi với tên dự án-tên-phiên bản-env-full.jar trong đó env-full là trình phân loại.

Hãy tưởng tượng sự ngạc nhiên của tôi khi tôi biết xml lắp ráp có thể được tham số hóa bởi các mục trong bản dựng. Đây chính xác là những gì tôi đang tìm kiếm.


2

Điều này làm việc cho tôi

<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

Cũng có thể ghi đè tệp jar gốc bằng cách sử dụng ${project.build.finalName}làm tên cuối cùng:

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.