Làm cách nào để thêm một dự án làm phụ thuộc của một dự án khác?


76

Có hai dự án độc lập ( myWarProjectMyEjbProject). Vì vậy, khi tôi xây dựng, myWarProjecttôi cần cài đặt nội dung MyEjbProjectvào kho lưu trữ cục bộ, để sau đó tôi có thể xác định trong myWarProject là phụ thuộc và đóng gói myWarProject thành công.

Có cách nào để xử lý điều này mà không cần cài đặt MyEjbProjectriêng và cũng không cần xác định là mô-đun mẹ.

Tôi biết điều này có thể đạt được thông qua kiến ​​tạo, nhưng tự hỏi liệu có cách nào để xử lý thông qua maven không?

Chúng ta có thể tạo dự án mẹ bằng "pom" và di chuyển hai dự án còn lại dưới dự án mẹ. Tuy nhiên, rất tiếc tôi không thể làm điều này vì hiện tại chúng tôi đã có hai dự án đó dưới dạng các dự án riêng biệt trong CVS mà tôi không thể thay đổi cấu trúc. Nếu tôi có thể xử lý điều này thông qua tệp pom, đây là những gì tôi đang tìm kiếm.


Chào Simon, Cảm ơn bạn đã trả lời nhanh chóng. Trên thực tế, MyEjbProject là một dự án maven khác mà tôi cần xây dựng khi xây dựng myWarProject. Có cách nào để xác định MyEjbProject pom trong myWarProject không?
kds

Hãy cho biết: chúng phụ thuộc vào nhau ở điểm nào? Ngay bây giờ, có vẻ như dự án chiến tranh phụ thuộc vào ejb để xây dựng một ứng dụng web hoàn chỉnh. Trong trường hợp này, xét cho cùng, hai dự án sẽ không độc lập như vậy.
Simon Hellinger

Tôi đã chỉnh sửa câu trả lời của mình (thêm vài thứ ở cuối) Hy vọng rằng điều này sẽ gần với câu hỏi của bạn hơn.
Simon Hellinger

Một biên tập thứ hai để trả lời của tôi, có lẽ chúng ta đã may mắn lần này :)
Simon Hellinger

Câu trả lời:


69

Giả sử MyEjbProject không phải là một Dự án Maven khác mà bạn sở hữu hoặc muốn xây dựng bằng maven, bạn có thể sử dụng các phụ thuộc hệ thống để liên kết đến tệp jar hiện có của dự án như vậy

<project>
   ...
   <dependencies>
      <dependency>
         <groupId>yourgroup</groupId>
         <artifactId>myejbproject</artifactId>
         <version>2.0</version>
         <scope>system</scope>
         <systemPath>path/to/myejbproject.jar</systemPath>
      </dependency>
   </dependencies>
   ...
</project>

Điều đó nói rằng thường là cách tốt hơn (và được ưu tiên hơn) để cài đặt gói vào kho lưu trữ bằng cách biến nó thành một dự án maven và xây dựng nó hoặc cài đặt nó theo cách bạn dường như đã làm.


Tuy nhiên, nếu chúng phụ thuộc vào nhau, bạn luôn có thể tạo một dự án mẹ riêng biệt (phải là một dự án "pom") khai báo hai dự án khác là "mô-đun" của nó. (Các dự án con sẽ không phải khai báo dự án thứ ba là dự án mẹ của chúng). Do đó, bạn sẽ nhận được một thư mục mới cho dự án mẹ mới, nơi bạn cũng có thể đặt hai dự án độc lập như sau:

parent
|- pom.xml
|- MyEJBProject
|   `- pom.xml
`- MyWarProject
    `- pom.xml

Dự án mẹ sẽ nhận được một phần "mô-đun" để đặt tên cho tất cả các mô-đun con. Sau đó, trình tổng hợp sẽ sử dụng các phần phụ thuộc trong các mô-đun con để thực sự tìm ra thứ tự các dự án sẽ được xây dựng)

<project>
   ...
   <artifactId>myparentproject</artifactId>
   <groupId>...</groupId>
   <version>...</version>

   <packaging>pom</packaging>
   ...
   <modules>
     <module>MyEJBModule</module>
     <module>MyWarModule</module>
   </modules>
   ...
</project>

Bằng cách đó, các dự án có thể liên quan với nhau nhưng (sau khi chúng được cài đặt trong kho lưu trữ cục bộ) vẫn được sử dụng độc lập như các tạo tác trong các dự án khác


Cuối cùng, nếu các dự án của bạn không nằm trong các thư mục liên quan, bạn có thể thử đặt chúng dưới dạng các mô-đun tương đối:

filesystem
 |- mywarproject
 |   `pom.xml
 |- myejbproject
 |   `pom.xml
 `- parent
     `pom.xml

bây giờ bạn chỉ có thể làm điều này (làm việc trong maven 2, chỉ cần thử nó):

<!--parent-->
<project>
  <modules>
    <module>../mywarproject</module>
    <module>../myejbproject</module>
  </modules>
</project>

Xin chào Simon, Vâng, như bạn đã nói, chúng tôi có thể tạo dự án mẹ bằng "pom" và di chuyển hai dự án còn lại dưới dự án mẹ. Tuy nhiên, rất tiếc tôi không thể làm điều này vì hiện tại chúng tôi đã có hai dự án đó dưới dạng các dự án riêng biệt trong CVS mà tôi không thể thay đổi cấu trúc. Nếu tôi có thể xử lý điều này thông qua tệp pom, đây là những gì tôi đang tìm kiếm.
kds

Bạn có thể chỉnh sửa câu hỏi của mình bằng thông tin bổ sung mà bạn vừa đưa ra trong nhận xét của mình: Nó có thể làm rõ vấn đề của bạn cho những người khác đang cố gắng trả lời!
Simon Hellinger

Chỉ là phương sách cuối cùng nếu không có gì khác hữu ích: Vì chúng đã được tách ra, bạn không thể chỉ kiểm tra chúng từ CVS vào thư mục con thích hợp trên hệ thống tệp cục bộ của mình? Kiểm tra MyEJBProject vào thư mục "parent / myejbproject" và kiểm tra MyWarProject trong "parent / mywarproject". Đây có thể là một cơn ác mộng bảo trì, mặc dù ...
Simon Hellinger

Cảm ơn Simon. Tôi đã tự hỏi phương pháp tốt nhất để xử lý loại kịch bản này là gì?
kds

Chỉ cần thêm một giải pháp khác, có lẽ điều này cuối cùng có thể hữu ích. Về câu hỏi cuối cùng của bạn trong phần bình luận: Bản thân tôi thực sự chưa bao giờ có kịch bản đó. Bất cứ khi nào chúng tôi xây dựng các mô-đun riêng biệt, chúng tôi đặt chúng vào một kho lưu trữ trung tâm (chẳng hạn như sonatype nexus) để các dự án khác tham khảo. Vì vậy, bạn xây dựng các dự án đầu tiên (nói, dự án ejb), triển khai nó, sau đó xây dựng một trong những khác (dự án chiến tranh) sử dụng đã được xây dựng tạo tác dự án ejb, và không phải là dự án riêng của mình maven
Simon Hellinger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.