2010-07-21 31 views
84

Tôi đang cố gắng tìm ra cách tổ chức nhiều (khoảng 50+) dự án maven2, để chúng có thể triển khai vào kho lưu trữ trung tâm. Khi sử dụng các mục tiêu mvn deploy, người ta cần phải xác định mục tiêu trong thẻ distributionManagement như thế này:Làm thế nào để xác định tổ chức phân phối quản lý của maven rộng?

<distributionManagement> 
    <repository> 
     <id>nexus-site</id> 
     <url>http://central_nexus/server</url> 
    </repository> 
</distributionManagement> 

Bây giờ, tôi không muốn mọi pom.xml duy nhất (của những 50+) để chứa khối này trên và hơn nữa. Đầu tiên của tôi mặc dù sẽ là tập tin settings.xml, nhưng có vẻ như nó là không thể (theo thiết kế) để xác định nó ở đó. Vì vậy, câu hỏi đầu tiên sẽ là, tại sao là trường hợp? Nếu có thể tôi có thể chỉ định nó trong tệp settings.xml trong bản phân phối maven2, có thể được phân phối cho tất cả các nhà phát triển.

Giải pháp duy nhất tôi tìm được là tạo một dự án tổng thể toàn bộ tổ chức, có chứa các cài đặt này và làm cho tất cả các tệp pom.xml khác phụ thuộc vào thẻ chính này thông qua thẻ <parent>. Nhưng điều này có vẻ lạ trong các bản dựng nhiều mô-đun:

- master configuration POM (pm) 
- Project 1 parent pom (p1 with module 1 and module 2 as modules) 
    - Project 1 module pom (with pm as parent) 
    - Project 2 module pom (with pm as parent) 

Thông thường tôi đọc tất cả tài liệu mà poms mô-đun nên sử dụng pom mẹ chứ không phải một số khác. Nhưng sau khi đọc trang web maven về Inheritance v. Aggregation nó được viết rằng nó thực sự là có thể.

Một vấn đề tôi tìm thấy là với thế hệ trang web maven, mà dường như có vấn đề với thiết lập này (module không được liên kết một cách chính xác nếu họ không có back-tham chiếu trực tiếp)

Vì vậy, đây là một hợp lệ tiếp cận ? Bất kỳ giải pháp nào khác, rõ ràng hơn, đơn giản hơn cho vấn đề này?

+1

http://maven.apache.org/pom.html#Distribution_Management – OhadR

+4

@OhadR: Chúng chỉ viết cách viết trong một dự án. Điểm là tôi không muốn sao chép nó khoảng 500 lần ... – mglauche

+1

tôi hiểu. lấy điểm. Vì vậy, như một trong những người trả lời cho biết, bạn có thể có một pom chính cho dự án, mà sẽ chứa 'distribMngmnt' ... – OhadR

Trả lời

124

Giải pháp tốt nhất cho việc này là tạo dự án tệp pom cha mẹ đơn giản (có bao bì 'pom') cho tất cả các dự án từ tổ chức của bạn.

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>your.company</groupId> 
    <artifactId>company-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <distributionManagement> 
     <repository> 
      <id>nexus-site</id> 
      <url>http://central_nexus/server</url> 
     </repository> 
    </distributionManagement> 

</project> 

Điều này có thể được xây dựng, phát hành và triển khai với nexus địa phương của bạn để mọi người đều có quyền truy cập vào đó.

Bây giờ cho tất cả các dự án mà bạn muốn sử dụng nó, chỉ cần bao gồm phần này:

<parent> 
    <groupId>your.company</groupId> 
    <artifactId>company-parent</artifactId> 
    <version>1.0.0</version> 
</parent> 

Giải pháp này sẽ cho phép bạn dễ dàng thêm những thứ phổ biến khác cho tất cả các dự án của công ty bạn. Ví dụ nếu bạn muốn tiêu chuẩn hóa việc sử dụng JUnit của bạn cho một phiên bản cụ thể, đây sẽ là nơi hoàn hảo cho điều đó.

Nếu bạn có dự án sử dụng cấu trúc đa mô-đun có cha mẹ riêng, Maven cũng hỗ trợ kế thừa chuỗi để bạn có thể chấp nhận tệp pom cha mẹ của dự án tham chiếu đến cha mẹ của công ty bạn và có mô-đun con của dự án không thậm chí biết về bố mẹ của công ty bạn.

Tôi thấy từ cấu trúc dự án ví dụ của bạn rằng bạn đang cố gắng đặt dự án cha mẹ của bạn ở cùng cấp với công cụ tổng hợp của bạn. Nếu dự án của bạn cần cha mẹ của riêng mình, cách tiếp cận tốt nhất mà tôi đã tìm thấy là bao gồm cha mẹ ở cùng cấp với phần còn lại của mô-đun và có tệp pom.xml tổng hợp của bạn tại thư mục gốc nơi tất cả thư mục của mô-đun của bạn tồn tại.

- pom.xml (aggregator) 
    - project-parent 
    - project-module1 
    - project-module2 

Việc bạn làm với cấu trúc này bao gồm mô-đun chính của bạn trong trình tổng hợp và xây dựng mọi thứ bằng 'mvn install' từ thư mục gốc.

Chúng tôi sử dụng giải pháp chính xác này tại tổ chức của tôi và nó đã đứng kiểm tra thời gian và làm việc khá tốt cho chúng tôi.

+2

Tôi không biết về việc thừa kế chuỗi, điểm tốt! – mglauche

+0

Đây là một câu trả lời khác mà tôi mô tả kế thừa dự án chi tiết hơn và cách quản lý sự phức tạp kế thừa của nó, tha thứ cho việc chơi chữ. ;) http://stackoverflow.com/questions/6347913/ –

+7

Chỉ cần một lưu ý nhỏ: vì lý do * tại sao * công ty mẹ là giải pháp tốt nhất, xem thảo luận [Không thể chỉ định distributionManagement trong settings.xml] (http : //maven.40175.n5.nabble.com/Can-t-specify-distributionManagement-in-settings-xml-td3181781.html) từ danh sách người dùng của Maven. –

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