2009-11-24 29 views
24

Tôi có một dự án (loại 'jar') mà (rõ ràng) xây dựng một cái lọ. Nhưng dự án đó có nhiều phụ thuộc. Tôi muốn Maven xây dựng một "gói" hoặc "lắp ráp" chứa jar của tôi, tất cả các lọ phụ thuộc và một số tập lệnh (để khởi chạy ứng dụng, v.v.)Với Maven, làm thế nào tôi có thể xây dựng một phân phối có jar của dự án của tôi và tất cả các lọ phụ thuộc?

Cách tốt nhất để làm gì? Cụ thể, cách tốt nhất để đưa người phụ thuộc vào hội đồng là gì?

Trả lời

25

Đối với một mô-đun duy nhất, tôi muốn sử dụng một hội đồng trông như một sau (src/assembly/bin.xml):

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>tar.gz</format> 
    <format>tar.bz2</format> 
    <format>zip</format> 
    </formats> 
    <dependencySets> 
    <dependencySet> 
     <unpack>false</unpack> 
     <scope>runtime</scope> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
    </dependencySets> 
    <fileSets> 
    <fileSet> 
     <directory>src/main/command</directory> 
     <outputDirectory>bin</outputDirectory> 
     <includes> 
     <include>*.sh</include> 
     <include>*.bat</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

Để sử dụng lắp ráp này, thêm cấu hình sau để pom.xml của bạn:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptors> 
     <descriptor>src/assembly/bin.xml</descriptor> 
     </descriptors> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

Trong mẫu này, bắt đầu/dừng tập lệnh nằm dưới src/main/command và được nhóm thành bin, các gói phụ thuộc được nhóm vào lib. Tùy chỉnh nó cho phù hợp với nhu cầu của bạn.

+0

I figured này đã phổ biến đến mức đã bảo hành một hội đồng được xây dựng trong .. nhưng dường như không. Cảm ơn như mọi khi. – Jared

+0

Tôi thực sự đồng ý, nó sẽ có ý nghĩa để có một mô tả được xác định trước cho một cái gì đó như thế này (dựa trên một số quy ước, ví dụ như vị trí kịch bản). –

5

Đây là giải pháp của tôi để tạo ra một phân phối .zip (hoặc .tar.gz/.tar.bz2) bao gồm tất cả các phụ thuộc trong một thư mục lib. Nó sẽ:

  1. Tạo một jar với Manifest bao gồm sự phụ thuộc của thư mục lib như classpath và lớp chính để chạy khi thực hiện các jar.
  2. Sao chép tất cả các lọ phụ thuộc vào thư mục target/lib.
  3. Tạo phân phối `zip với bình chính và tất cả các lọ phụ thuộc của thư mục lib.

Trích từ pom.xml:

<!-- create distributable --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>full.path.to.MainClass</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>attached</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/resources/dist.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

dist.xml:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>bin</id> 
    <formats> 
     <format>zip</format> 
     <format>tar.gz</format> 
    </formats> 
    <fileSets> 
     <fileSet> 
      <directory>${project.basedir}</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>README*</include> 
       <include>LICENSE*</include> 
       <include>NOTICE*</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.build.directory}</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>*.jar</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.build.directory}/lib</directory> 
      <outputDirectory>lib</outputDirectory> 
      <includes> 
       <include>*.jar</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.build.directory}/site</directory> 
      <outputDirectory>docs</outputDirectory> 
     </fileSet> 
    </fileSets> 
</assembly> 

Các dist.xml được bắt nguồn từ định dạng bin mô tả ở đây: http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#bin

+0

Ngoài ra, bạn có thể thêm cài đặt 'dependencySet' vào' dist.xml' như được Pascal Thivent đề xuất và loại bỏ 'maven-dependency-plugin' trong tệp' pom.xml'. –

Các vấn đề liên quan