2010-04-23 15 views
10

Tôi có một dự án đa mô-đun và muốn tạo một cái lọ chứa các lớp của tất cả các mô-đun của tôi. Bên trong POM cha mẹ của tôi, tôi đã tuyên bố plugin sau:maven: lắp ráp dự án nhiều mô-đun vào một cái bình

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-assembly-plugin</artifactId> 
<configuration> 
    <descriptorRefs> 
    <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
</configuration> 
</plugin> 

Tuy nhiên, khi chạy lắp ráp mvn: lắp ráp, chỉ có nguồn từ thư mục mẹ (trống) được bao gồm. Làm cách nào để đưa các nguồn từ mô-đun của tôi vào lưu trữ?

+0

bạn đã tìm ra cách? – aurelius

Trả lời

0

Được xác định trước bin sẽ không thực hiện thủ thuật tại đây. Bạn sẽ phải sử dụng một bộ mô tả tùy chỉnh tương tự như mô tả bin được xác định trước nhưng điều đó tuyên bố moduleSet để bao gồm các mô-đun dự án của bạn.

6

Tôi nghĩ rằng bạn đang tìm kiếm Shade Plugin Maven:

http://maven.apache.org/plugins/maven-shade-plugin/index.html

gói lên bất kỳ số lượng phụ thuộc vào một depenency gói uber. Điều này sau đó có thể được triển khai đến một kho lưu trữ.

+0

Thêm một dự án con tùy thuộc vào các dự án con khác (đảm bảo rằng chúng được bao gồm tất cả) đã làm các trick. Khai báo bóng râm: thực hiện bóng râm trong dự án con, được cấu hình với một gói duy nhất cho tất cả các tạo phẩm trong nhóm đa mô-đun. Xem http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html để biết chi tiết. –

1

Để gói lớp từ tất cả các mô-đun để một lọ duy nhất tôi đã làm như sau:

  1. tạo mô-đun bổ sung mà chỉ được sử dụng cho đóng gói nội dung của tất cả các module khác để một lọ duy nhất. Điều này thường được gọi là mô-đun lắp ráp . Hãy thử gọi mô-đun này giống như tệp jar mục tiêu.

  2. Trong tệp pom.xml của mô-đun mới này, tôi đã thêm maven-assemby-plugin. Plugin này gói tất cả các lớp và đặt chúng trong một tệp. Nó sử dụng tập tin cấu hình bổ sung (bước 4.)

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
      <id>go-framework-assemby</id> 
      <phase>package</phase><!-- create assembly in package phase (invoke 'single' goal on assemby plugin)--> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
       <descriptor>src/main/assemble/framework_bin.xml</descriptor> 
       </descriptors> 
        <finalName>framework</finalName> 
        <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

3.In pom.xml của mô-đun mới này, tôi cũng bổ sung phụ thuộc vào tất cả các mô-đun khác bao gồm pom mẹ. Chỉ các mô-đun được bao gồm trong các phụ thuộc sẽ được đóng gói trong tệp jar mục tiêu.

<dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>fwk-bam</artifactId> 
     <version>${project.version}</version> 
    </dependency>... 

4. Cuối cùng tôi tạo ra mô tả lắp ráp trong mô-đun lắp ráp (file: src/main/lắp ráp/framework_bin.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>all-jar</id> 
    <formats> 
     <format>jar</format> <!-- the result is a jar file --> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> <!-- strip the module prefixes --> 

    <dependencySets> 
     <dependencySet> 
      <unpack>true</unpack> <!-- unpack , then repack the jars --> 
      <useTransitiveDependencies>false</useTransitiveDependencies> <!-- do not pull in any transitive dependencies --> 
     </dependencySet> 
    </dependencySets> 
</assembly>