2016-02-11 15 views
5

Vấn đềMaven - Cấu hình module Child

tôi có một dự án maven rằng có cấu trúc tương tự như sau:
(đơn giản hóa cho mục đích giải thích)

--parent 
    |-- child A (inherits from parent) 
    |-- child B (inherits from parent) 
      |-- child B1 (inherits from B) 
      |-- child B2 (inherits from B) 
      |-- child B3 (inherits from B) 

Chỉ duy nhất trẻ em B1B2 phải được xây dựng bằng cách sử dụng một profil nhất định e bao gồm một số công cụ xây dựng bổ sung. Do đó, cấu hình đã được chỉ định trong mô-đun B.

Logic các module thuộc về mô-đun B và bổ sung kế thừa một số phụ thuộc vv (aggreagtion + thừa kế).
(tưởng tượng một cái gì đó giống như B = Frontend, B1 = UI, B2 = Chủ đề, B3 = Cái gì khác)


Câu hỏi

  • Có khả năng vẫn sử dụng a xây dựng đầy đủ từ phụ huynh pom và kích hoạt cấu hình theo đúng chỉ trong trẻ em chính xác? (sẽ là giải pháp yêu thích của tôi)
  • Hoặc tôi có cần các bản dựng riêng biệt sử dụng lò phản ứng tiên tiến tùy chọn (-pl, v.v ...) không?
  • Hoặc có cách tiếp cận hoàn toàn khác cho các trường hợp như vậy không?

Sửa

Sửa là câu hỏi được xác định là duplicate: Vấn đề là giải pháp được đề cập trong câu hỏi theo không hoạt động.

Nếu tôi kích hoạt cấu hình phụ bằng cách sử dụng một tài sản, nó sẽ được kích hoạt cũng cho mô-đun B (công ty mẹ), và cho ALL trẻ em.

Tôi chỉ muốn nó hoạt động cho trẻ B1B2.

+1

Có thể trùng lặp với [Kích hoạt hồ sơ trẻ em từ hồ sơ gốc] (http://stackoverflow.com/questions/35304770/activating-a-child- profile-from-a-parent-profile) –

+0

Đồng ý với @A.DiMatteo. Câu hỏi được liên kết trả lời câu hỏi này. – Tunaki

+0

Vui lòng xem chỉnh sửa của tôi. – JDC

Trả lời

8

Nếu bạn muốn có tiểu sử cần được áp dụng cho các mô-đun phụ (và chỉ một số mô-đun), được xác định theo cách tập trung trong dự án mẹ (pom) và chưa áp dụng cấu hình cho chính cha mẹ, đây là một phương pháp đề xuất:

Xác định cấu hình trong pom phụ huynh, mẫu một:

<profiles> 
    <profile> 
     <id>sample-profile</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>1.5</version> 
        <executions> 
         <execution> 
          <id>print-hello</id> 
          <phase>${phase.prop}</phase> 
          <goals> 
           <goal>run</goal> 
          </goals> 
          <configuration> 
           <target> 
            <echo message="hello there!" /> 
           </target> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Lưu ý những gì chúng tôi đang làm:

  • plugin phase phần tử là para được yêu cầu, do đó, việc ràng buộc plugin vào giai đoạn xây dựng cũng sẽ được parametrized
  • Bây giờ chúng tôi có thể quyết định thông qua thuộc tính mà giai đoạn đính kèm thực hiện plugin này
  • Hiện tại chúng tôi có thể quyết định thông qua việc thực thi plugin này. hoặc giai đoạn trống)

Vì vậy, trong pom cùng cha mẹ, chúng ta hãy xác định tài sản:

<properties> 
    <phase.prop>none</phase.prop> 
</properties> 

như vậy, việc xây dựng chạy trên pom mẹ sẽ đính kèm thực hiện plugin để không có giai đoạn (none không phải là một keywor d hoặc giá trị đã biết, chỉ là một tiêu chuẩn thực tế được sử dụng cho một pha không tồn tại, bạn có thể để trống hoặc đặt bất kỳ giá trị nào bạn thích, nó sẽ có tác dụng tương tự) và do đó bỏ qua nó. Nó cũng sẽ bị bỏ qua theo mặc định trong tất cả các module đã khai báo. Hồ sơ sẽ vẫn hoạt động trong mọi mô-đun, nhưng sẽ vô hại vì nó sẽ không thực thi bất kỳ plugin nào theo mặc định.

Sau đó, trong module mà bạn muốn các hành plugin để được kích hoạt bạn có thể tái định nghĩa chỉ là tài sản có liên quan và các giai đoạn cần thiết:

<properties> 
    <phase.prop>package</phase.prop> 
</properties> 

Khi sau đó kích hoạt hồ sơ cá nhân từ việc xây dựng chính (phụ huynh)

mvn clean install -Psample-profile 

Phụ huynh sẽ áp dụng nó cho tất cả các mô-đun, nhưng việc thực hiện hồ sơ có hiệu quả sẽ chỉ xảy ra trong đó giá trị phase.prop có một giá trị maven-ý nghĩa.

Nếu bạn cần có các giai đoạn khác nhau để thực hiện các plugin khác nhau, thì bạn có thể xác định nhiều thuộc tính và áp dụng cùng một mẫu.

Nếu bạn không có plugin thực thi nhưng thay vì cấu hình plugin chung cho plugin đã được Maven thực hiện (như là một phần của gói và xây dựng mặc định), bạn có thể xác định lại thực thi của nó ghi đè default execution id.

Lưu ý rằng chúng tôi có thể làm điều tương tự bằng cách sử dụng các yếu tố skip cấu hình, nhưng:

  • không phải tất cả các plugin cung cấp các entry skip cấu hình
  • sử dụng các yếu tố phase không liên quan đến bất kỳ cấu hình và có thể được sử dụng lại cho các lần thực hiện được đính kèm cùng một giai đoạn
+0

Tôi đã triển khai giải pháp của bạn và có vẻ như nó hoạt động. Chỉ có vấn đề là việc thực thi plugin hồ sơ của tôi diễn ra theo các giai đoạn khác nhau. Bây giờ tôi cần thiết lập 4 thuộc tính bên trong pom con. Tôi đã cố gắng để làm điều này bằng cách sử dụng các plugin antaven maven trong giai đoạn xác nhận (con đặt một tài sản để đúng và antrun đặt tất cả các thuộc tính khác), nhưng điều này dường như không hoạt động. Cảm ơn bạn anyway, nếu tôi không tìm thấy một giải pháp để thiết lập nhiều thuộc tính cùng một lúc điều này vẫn sẽ giúp chúng tôi ra ngoài. – JDC

+0

@JDC Có lẽ [Thuộc tính Maven Plugin] (http://www.mojohaus.org/properties-maven-plugin/) giúp thiết lập nhiều thuộc tính. –

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