2011-11-23 28 views
27

Tôi có một dự án mà tôi biên dịch với maven. Tôi có các cấu hình khác nhau được khai báo trong tệp pom.xml. Đối với một số các cấu hình này, tôi thích xây dựng một cuộc chiến tranh, và đối với các hồ sơ khác tôi thích một cái bình. Tôi sử dụng để tự chỉnh sửa các tập tin pom.xml và thay đổi đóng gói biến hoặc làThay đổi bao bì dựa trên hồ sơ hoạt động trong pom

<packaging>war</packaging> 

hoặc

<packaging>jar</packaging> 

trước khi làm một

$ mvn clean package -Pchosenprofile 

Làm thế nào tôi có thể nói mvn bao bì tương ứng với mỗi hồ sơ vì vậy tôi không cần phải chỉnh sửa pom.xml?

Trả lời

75

Nếu bạn muốn sử dụng, quý khách có thể sử dụng một cái gì đó như:

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    .. 
    <packaging>${packaging.type}</packaging> 

    <profiles> 
     <profile> 
      <id>webapp</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <properties> 
       <packaging.type>war</packaging.type> 
      </properties> 
     </profile> 
     <profile> 
      <id>batch</id> 
      <properties> 
       <packaging.type>jar</packaging.type> 
      </properties> 
       </profile> 
      </profiles> 
</project> 
+8

Điều đó thật dễ dàng và rất đẹp khiến tôi mỉm cười. Cảm ơn, ngay cả khi nó đến trễ một năm :). – matiasg

1

Tôi không nghĩ bạn có thể.

Hai lựa chọn thay thế tôi có thể nghĩ:

  • có hai mô-đun riêng biệt để đóng gói, và gọi một trong những tùy thuộc vào hồ sơ
  • có mô-đun của bạn trong chiến tranh và tinh chỉnh chu kỳ (bao gồm/loại trừ xây dựng bước) tùy thuộc vào hồ sơ để sản xuất bình hoặc chiến tranh của bạn

Tôi thích phương pháp thứ hai tốt hơn - một máy chủ xây dựng có thể sẽ xây dựng cả hai và nhà phát triển sẽ sử dụng cấu hình/cài đặt thích hợp để bỏ qua loại không mong muốn.

+0

Cảm ơn. Tôi thích cách tiếp cận attachClasses tốt hơn bởi vì nó đơn giản hơn, nhưng tôi có thể phải sử dụng thứ gì đó như thế này trong một tình huống phức tạp hơn. – matiasg

+0

attachClasses (hoặc tương tự) là những gì tôi đã có trong tâm trí cho viên đạn 2 - về cơ bản một cuộc chiến là một cái lọ với những thứ phụ - và maven hoàn toàn có khả năng sản xuất cả hai cùng một lúc – ptyx

4

Bạn đã xem cài đặt cấu hình attachClasses của plugin chiến dịch chưa? Thiết lập đơn giản này sẽ cho phép bạn xây dựng cả một cuộc chiến và một cái bình (theo mặc định với "class" classifier) ​​trong một thực thi maven duy nhất.

+0

Đây không phải là wat tôi đã có trong tâm trí, nhưng nó thực sự giải quyết được vấn đề của tôi và nó khá dễ dàng. – matiasg

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