2009-08-26 10 views
95

Tôi hiện đang sử dụng nhóm lắp ráp với phụ thuộc để tạo một cái bình như vậy. Tuy nhiên, tên của cái lọ của tôi hơi dài một chút.Có thể đổi tên một phụ thuộc vào maven jar-with-dependencies không?

Vì bình này đang được chương trình RPG sử dụng trên AS400, 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, khác hơn là bằng tay, tôi đã không tìm thấy một cách để đổi tên lọ từ bình thường project-name-version-classifier-jar-with-dependencies.jar. Tôi muốn một cái gì đó giống như project-name-version-classifier-full.jar

Có cách nào để thực hiện việc này mà không cần sao chép cơ bản bộ mô tả lắp ráp với phụ thuộc và gọi nó là đầy đủ?

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

Tôi cần hai hiện vật. Các jar với phân loại của tôi giữ khu vực mà xây dựng được cho. Các jar với tất cả các phụ thuộc mà cũng bao gồm các khu vực.

project-name-version-region-full.jarproject-name-version-region.jar phải được lưu trữ trong kho lưu trữ. Trong ví dụ đầu tiên, trình phân loại là vùng đầy đủ, trong vùng thứ 2 của nó. Cái thứ hai đang hoạt động.

Trả lời

168

Bạn có thể chỉ định finalName tài sản để cung cấp cho các jar tên mà bạn muốn, và xác định rằng appendAssemblyId phải là sai lầm để tránh những "jar-với-phụ thuộc" hậu tố.

Cấu hình bên dưới sẽ ra một cái bình gọi là "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 ý kiến ​​của bạn, bằng cách sử dụng built-in mô tả sẽ không hoạt động. Tôi tin rằng đây là 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 bộ mô tả tích hợp, vì vậy bạn kết thúc bằng tên lớn.

Để giải quyết sự cố này, 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-dependencies và sửa đổi id.

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

Cấu hình pom sẽ trông 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/lắp ráp 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> 
+1

Ah, appendAssemblyId, làm sao anh nhớ em. Cảm ơn! –

+0

Làm việc trên công cụ đó. Về cơ bản, tôi cần lưu trữ hai tạo phẩm phân loại. Với appendAssemblyId được bật, tôi có 3 artifiacts, một không có phân loại, phiên bản phân loại và phiên bản jar-with-dependencies. với appendAssemblyID đã tắt bình uber được cài đặt cho phiên bản không phân loại. Tôi cần phải có những kẻ sử dụng một khu vực + phân loại dựa trên đầy đủ mà nói nơi họ được xây dựng cho. Rất tiếc, việc thêm thẻ phân loại không hoạt động. –

+0

Chỉ cần thiết lập * appendAssemblyId * thành * false * đã thực hiện công việc. Cho phép bạn giữ tên cuối cùng thông thường mà không cần viết lại. –

2

tôi sẽ cung cấp cho Giàu tín dụng đã chỉ cho tôi đi đúng hướng, nhưng muốn đăng các giải pháp mà làm việc cho tôi như Rich's là hơi off:

jar-lắp ráp của tôi.xml trông như thế này cho phép id lắp ráp thay đổi đối với khu vực được lưu trữ dưới dạng tài sản trong hồ sơ cá nhân 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ác thiết lập maven-lắp ráp-plugin như thế này được xây dựng của tôi project với tên project-name-version-env-full.jar của tôi, nơi env-full là classifier.

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.

8

Nhờ các bài đăng ở đây và một số thao tác trong số maven docs Tôi đã đưa ra cấu hình sau cho cụm lắp ráp thực thi một lần chung với tên tùy chỉnh.

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

này sẽ sản xuất MyJarName.jar với tất cả các phụ thuộc của nó lại được đóng gói vào cùng jar và quy định Main-Class: karlthepagain.MyMain.

+1

Điều này cố định tất cả các vấn đề của tôi chủ yếu là đổi tên jar cuối cùng với phụ thuộc. –

13

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

Về cơ bản, nó giống như câu trả lời của Rich, ngoại trừ finalName đượ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> 
+0

Bạn đã đi một chặng đường dài kể từ câu trả lời đầu tiên của bạn, và câu trả lời đó vẫn giúp tôi hôm nay nên thx! ; D – vakio

+1

Tôi đang tìm một giải pháp giống như của bạn, không có tệp jar-assembly.xml riêng biệt. Cảm ơn ... Nó hoạt động hoàn hảo cho tôi ... –

+0

Tuyệt vời! Không có gì :) – vikingsteve

2

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>