2015-10-28 17 views
5

Tôi có một dự án với vài tá trình bổ sung Eclipse, tất cả liên quan đến nhau và sống trong các thư mục con khác nhau. Việc xây dựng đã được chuyển đổi thành một mô-đun đầu tiên đa mô-đun Tycho xây dựng một vài năm trước đây và nó hoạt động khá tốt.Tên tệp pom.xml tùy chỉnh trong Maven multimodule cho Tycho

Một trong các plugin khá quan trọng và cũng có thể được xây dựng dưới dạng ứng dụng Java độc lập, không sử dụng thời gian chạy Eclipse. Hiện tại, nó có tệp POM riêng của mình (pom-standalone.xml) để Jenkins có thể xây dựng ứng dụng độc lập riêng biệt và xây dựng Tycho không biết gì về nó - pom-standalone chỉ liệt kê các plugin plugin được xây dựng trước đó (nhờ Tycho!) Và các thư viện Eclipse mà nó cần phụ thuộc. vấn đề Couple với cách tiếp cận này mặc dù:

  • tôi không thể dễ dàng sử dụng IntelliJ để làm việc trên các dự án độc lập với quản lý phụ thuộc Maven, bởi vì nó không nhận ra tên tập tin tùy chỉnh pom-standalone.xml như một POM.

    • Rất nhiều lọ mà dự án này dựa vào được kiểm tra trong dự án vì lợi ích của tệp Tycho và tệp kê khai Eclipse, nhưng chúng cũng được quản lý bởi Maven cho bản dựng độc lập. Vì vậy, bất kỳ phụ thuộc nào phải được thêm vào tệp pom-standalone.xml AND được nhập vào tệp kê khai OSGi VÀ đã đăng ký kiểm soát nguồn cho các mục đích Eclipse.

Nó có vẻ như một cách giải quyết đơn giản sẽ nói với Tycho/mô-đun để sử dụng một cái gì đó khác hơn pom.xml cho POM của submodule, hoặc có lẽ tất cả các file POM multimodule, vì Eclipse không sử dụng những anyway - sau đó, pom-standalone.xml có thể được chuyển đổi thành pom.xml và sau đó IntelliJ sẽ ổn với nó.

Tôi biết bạn có thể chỉ định thuộc tính -f cho bản dựng Maven, nhưng điều đó thực sự áp dụng cho tất cả các mô-đun con? Bạn có thể chỉ định tên tệp POM cho chỉ ONE mô-đun con?

Có giải pháp thay thế nào không? Các bản dựng Eclipse/Tycho/p2 có vẻ hơi đau đầu đòi hỏi phải quản lý thư viện thủ công và kiểm tra trong thư viện để kiểm soát nguồn, nhưng có lẽ đã có những thay đổi mà tôi không biết trong thế giới xây dựng Eclipse vài năm qua.

Tìm thấy số Similar Question không hữu ích nhiều.

Trả lời

7

Bạn có thể bao gồm các dự án trong tập hợp POM bằng cách chỉ định tên đầy đủ cho tệp POM có tên tùy chỉnh. Ví dụ:

<modules> 
    <module>org.example.bundle1</module> 
    <module>org.example.bundle2</module> 
    <module>org.example.keybundle/pom-tycho.xml</module> 
</modules> 

Cả hai đều hoạt động trong xây dựng Maven và Maven/Tycho thuần túy.

+0

Cảm ơn bạn! Tôi không thể tìm thấy thông tin đó ở đâu cả. Bây giờ nếu chỉ tôi biết làm thế nào để tránh kiểm tra trong tất cả những lọ cho việc xây dựng nhật thực. – tdm

+0

@tdm - Nếu lọ của bạn là 'mvn install' vào kho lưu trữ maven cục bộ, hoặc' mvn deploy' đến kho lưu trữ maven từ xa, thì pom của bạn có thể liệt kê chúng là phụ thuộc và maven sẽ lấy chúng cho bản dựng. Yêu cầu Eclipse thực hiện cập nhật 'maven' để nhận bất kỳ thay đổi nào trong pom. –

1

Để mở rộng @oberlies trả lời một chút:

SCENARIO: top hợp POM do thỏa thuận hợp nhiều hương vị, vì vậy bất kỳ phong cách có thể được xây dựng từ đầu.

<!-- in file pom.xml --> 
<modules> 
    <module>org.example.bundle1</module> 
    <module>org.example.bundle2</module> 
    <module>org.example.keybundle</module> 
</modules> 

Tất cả các môđun con sẽ được xây dựng sử dụng tiêu chuẩn của họ pom.xml

<!-- in file pom-tycho.xml --> 
<modules> 
    <module>org.example.bundle1/pom.xml</module> 
    <module>org.example.bundle2/pom.xml</module> 
    <module>org.example.keybundle/pom-tycho.xml</module> 
</modules> 

submodules sẽ được xây dựng bằng cách sử dụng tập tin POM đặc biệt được đặt tên.

và tương tự như vậy:

<!-- in file pom-special.xml --> 
<modules> 
    <module>org.example.bundle1/pom.xml</module> 
    <module>org.example.bundle2/pom-special.xml</module> 
    <module>org.example.keybundle/pom-tycho.xml</module> 
</modules> 

submodules có tập tin tùy chỉnh POM sử dụng chúng, và những người khác nêu họ vẫn muốn tập tin POM bình thường, tất cả phụ thuộc vào tên của tập tin tập hợp POM hàng đầu.

mvn -f pom-tycho.xmlgiả định tên tệp đó trong tất cả môđun phụ. Vì vậy, nếu bạn muốn pom.xml trong bất kỳ mô-đun con nào khi tệp trên cùng không có tên là pom.xml, bạn cần phải chỉ định đầy đủ cho từng mô-đun con.

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