2012-05-01 37 views
6

Tôi đang sử dụng maven-assembly-plugin để xây dựng một tập tin thực thi, khối nguyên khối với các phụ thuộc. Tôi cũng đang sử dụng tính năng lọc tài nguyên để thiết lập một số thuộc tính tùy chỉnh, đặc trưng làn đường (dev, giai đoạn, sản phẩm, v.v.).Bao gồm tên hồ sơ Maven trong assembly-plugin được xây dựng (với phụ thuộc) jar

Làm cách nào để đặt tên cuối cùng của lọ bao gồm tên ngõ (dev, stage, prod, etc)?

Tôi muốn các mvn sau lệnh để cho kết quả trong lọ mà giống như thế này:

  • mvn clean install -P DEV - cài đặt> ws-client-DEV.jar
  • mvn sạch -P GIAI ĐOẠN -> ws-client-STAGE.jar
  • mvn clean install PROD -P -> ws-client-PROD.jar

có một tài sản maven nơi nào đó tôi không thể tìm thấy? Tôi muốn tránh sử dụng một đối số dòng lệnh dư thừa nếu có thể (ví dụ - 'mvn clean install -P DEV -Dlane = DEV').

Dưới đây là cấu hình lắp ráp Plugin của tôi:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2.2</version> 
    <executions> 
     <execution> 
      <id>jar-with-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>ws-client</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>Example</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 

Trả lời

9

Tương tự như của Bhaskar nhưng được sửa đổi đôi chút.

Sau <build> thẻ, thêm

<finalName>${project.artifactId}-${lane}</finalName> 

Bạn có thể thiết lập giá trị ngõ như một tài sản trong hồ sơ cá nhân.

<profiles> 
    <profile> 
     <id>DEV</id> 
     <properties> 
      <lane>DEV</lane> 
     </properties> 
    </profile> 
</profiles> 

Sau đó, thực hiện xây dựng như bạn nói: mvn ... -P DEV (ví dụ mvn clean install -P DEV)

+0

Tuyệt vời, đã làm việc rất đẹp! – chadmaughan

+0

Tên cuối cùng sẽ không hoạt động trên tạo phẩm được triển khai chỉ trên tạo phẩm được lưu trữ trong thư mục đích trong lần chạy hiện tại của bạn. – khmarbaise

+0

@khmarbaise - Đúng. Đối với cách sử dụng cụ thể này, bình đang được phân phối bên ngoài một kho lưu trữ (tôi biết, không lý tưởng). Tôi muốn có một dấu hiệu trực quan để người tiêu dùng "mavenless" biết những gì làn đường và tài sản họ đang sử dụng bằng cách chỉ đơn giản là liếc nhìn tập tin jar trên classpath của họ. – chadmaughan

2

Sau <build> thẻ, thêm

<finalName>${project.artifactId}-${lane}</finalName> 

Và thiết lập các "ngõ" biến env để tên cấu hình ví dụ

mvn -P DEV -Dlane = DEV, vv

Hoặc bạn có thể là một chút sáng tạo hơn và khám phá ID cấu hình hoạt động như mô tả ở đây Maven - Can I reference profile id in profile definition?

EDIT ------

Nếu bạn muốn tránh các đối số thừa.

Tại sao không kích hoạt cấu hình tương ứng bằng cách sử dụng env. bất động sản.

vân vân dòng lệnh

mvn -Dlane=DEV|STAGE|PROD 

và trong pom

<profile> 
    <id>DEV</id> 
    <activation> 
    <property> 
     <name>lane</name> 
     <value>DEV</value> 
    </property> 
    </activation> 
    <build> 
    // rest of the profile 
</profile> 

Và tương tự cho GIAI ĐOẠN và PROD hồ sơ.

+0

Cảm ơn cho câu trả lời.Tôi muốn tránh sử dụng một đối số dòng lệnh dư thừa nếu có thể (tôi đã cập nhật câu hỏi của mình để phản ánh điều đó). Liên kết được cung cấp của bạn thật thú vị. Bất kỳ ý tưởng về làm thế nào để tham khảo dòng lệnh quy định (hoạt động) hồ sơ thông qua một tài sản mvn? – chadmaughan

+0

Đã chỉnh sửa với thông tin thêm về tránh redunduncy –

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