2011-09-14 13 views
8

Tôi có lắp ráp tùy chỉnh sau:Thêm classpath để bày tỏ với một mô tả lắp ráp tùy chỉnh

<assembly> 
    <id>full</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

Và phần cấu hình sau:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> 
     </descriptors> 
     <archive> 
      <manifest> 
       <mainClass>com.example.MyExample</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>./lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Theo tài liệu trên lắp ráp Plugin maven, đây nên thêm một mục classpath vào tệp kê khai, tuy nhiên nó không hoạt động. Nếu tôi sử dụng mục tiêu lắp ráp không được chấp nhận thay vì duy nhất, nó hoạt động.

Tôi nhận thấy một nơi nào đó có người đề cập rằng phần lưu trữ chỉ có sẵn với định dạng jar, nhưng đó là những gì tôi đang sử dụng.

Khi chúng không được lắp ráp: lắp ráp, chúng có định nghĩa một cách mới để thực hiện điều này một cách chính xác không? Tôi thực sự không thích sử dụng chức năng không được chấp nhận, nhưng nếu họ phá vỡ cách mọi thứ hoạt động và không đúng cách ghi lại nó, tôi thực sự không biết làm thế nào để tránh điều này.

Có ai có bất kỳ ví dụ nào về cách thực hiện việc này đúng cách không?

Trả lời

4

Đây không phải là cách sử dụng tốt plugin lắp ráp. Java không làm jars-in-jars. Bạn có thể sử dụng tùy chọn cấu hình của maven-jar-plugin để thêm một classpath vào manifest của jar chính của bạn, và sau đó sử dụng plugin assembly để thu thập các phụ thuộc của bạn và thả sau đó bên cạnh jar chính của bạn trong một zip hoặc tarball.

http://maven.apache.org/shared/maven-archiver/examples/classpath.html

+0

Tôi đã xóa các phụ thuộc khỏi bình và đặt chúng trong thư mục lib cùng với bình. Tuy nhiên, vấn đề vẫn còn. Plugin lắp ráp không thêm đường dẫn lớp như được chỉ định. – davija

+0

Nó không phải. Plugin jar có công việc đó. – bmargulies

+3

Theo tài liệu hướng dẫn trên plugin lắp ráp, nếu bạn yêu cầu nó thêm classpath vào nó. Nó hoạt động trong các mục tiêu khác hiện không được chấp nhận. Kiểm tra tài liệu – davija

2

Bạn nên sử dụng các plugin maven jar:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>main class</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
2

Thử cập nhật các maven-assembly-plugin lên phiên bản 2.5 hoặc mới hơn.

Sự vắng mặt không mong muốn của mục nhập Đường dẫn lớp trong tệp kê khai dường như đã gây ra bởi lỗi MASSEMBLY-576. Lỗi đã được sửa trong phiên bản 2.5 của plugin (phát hành ngày 26 tháng 10 năm 2014).

+0

không được trợ giúp, nâng cấp lên 2.5 Lớp-Đường dẫn vẫn bị thiếu :( – sloven