2010-07-26 34 views
6

Kịch bản ví dụ: Tôi có 2 dự án, "dự án chung" và "dự án ứng dụng". Dự án ứng dụng phụ thuộc vào API được cung cấp bởi dự án chung. Ngoài ra còn có các lọ bên thứ 3 (ví dụ ổi) được cả hai dự án sử dụng.Thực tiễn tốt nhất cho việc thiết lập nhiều dự án với m2eclipse

Tôi đang cố gắng chuyển đổi sang sử dụng maven và m2eclipse, nhưng không rõ ràng về cách tiếp cận tốt nhất. Hiện tại, thiết lập không có maven của tôi có các jars bên thứ 3 được thêm làm thư viện trên dự án chung và được đánh dấu là "đã xuất". Bằng cách này, chúng được kế thừa bởi dự án ứng dụng và tôi không phải thêm chúng một cách rõ ràng như các thư viện trong dự án ứng dụng. Cả hai dự án đều đang trong quá trình phát triển tích cực, vì vậy tôi không muốn phải xây dựng một lọ các dự án chung trước, sau đó "cài đặt" nó vào kho lưu trữ cục bộ của tôi trước khi tôi có thể sử dụng các tính năng mới trong dự án ứng dụng.

Cách tiếp cận được đề xuất cho loại bố cục dự án này là gì? Tôi thấy các chủ đề sau chạm vào khoảng trên topic: Project in Eclipse that builds a jar used by another project in Eclipse

Cảm ơn

Trả lời

0

Thể hiện sự phụ thuộc mà mỗi dự án có trong thành phần <dependencies> của POM.

Plugin m2eclipse sau đó sẽ tự động chọn chúng, từ tệp pom.xml và thêm chúng dưới dạng tham chiếu thư viện vào đường dẫn xây dựng trong Eclipse.

Nếu application-project phụ thuộc vào common-project, thì nó cũng sẽ thừa hưởng phụ thuộc của nó - không cần phải liệt kê các phụ thuộc chung giữa hai lần thứ hai trong tệp pom.xml của application-project.

0

Giả sử bạn đã cài đặt maven trong máy tính của mình, sau đó tải xuống cài đặt lỗ hổng m2eclipse và khởi động lại nhật thực.

Hãy nhớ mục tiêu xây dựng maven là sản xuất và tạo tác có thể được phân phối và sử dụng lại, nếu bạn không muốn tạo mvn install trước khi có phiên bản ổn định của API "chung dự án", mặc dù không có gì sai khi thực hiện nó trong quá trình phát triển.

Đối với trường hợp của bạn, bạn có thể làm một trong các cách sau:

  1. Nếu common-project API là hoàn toàn cần thiết và sẽ thường xuyên hơn không chỉ được sử dụng trong giới hạn của các application-project sau đó xây dựng dự án của bạn như một đa dự án mô-đun và khai báo common-project làm mô-đun của application project của bạn. Here is an example of how to do this.
  2. Nếu không thì common-project sẽ thường xuyên hơn không phải là một tạo phẩm được chia sẻ, sau đó xây dựng từng dự án độc lập đã khai báo phụ thuộc của cả hai trong tệp pom.xml của họ.
  3. Trước tiên, bạn có thể triển khai một phần thực hiện common-project, đóng gói và sau đó tuyên bố là phụ thuộc trong application-project với số <scope>system<scope> xác định vị trí của hệ thống tệp, điều này sẽ cho maven biết rằng phụ thuộc luôn hiện diện và không tìm kiếm nó trong bất kỳ kho lưu trữ nào; mặc dù làm một mvn install sẽ thanh lịch hơn điều này bạn đang cố gắng tránh điều đó.

Kính trọng.

+0

Cảm ơn - Tôi đoán tôi chỉ nên đi với việc tạo dự án chung một tạo phẩm được chia sẻ và xem cách hoạt động của nó. Dường như tôi vẫn có thể thiết lập các phụ thuộc dự án với nhật thực để tái cấu trúc vẫn có thể được áp dụng trên nhiều dự án. – MavenN00b

+0

Tôi hoàn toàn chống lại việc sử dụng phụ thuộc phạm vi 'hệ thống', đây là một thực hành rất xấu mà không nên khuyến khích, mọi người chỉ lạm dụng nó. –

4

Ví dụ: Tôi có 2 dự án, "dự án chung" và "dự án ứng dụng".Dự án ứng dụng phụ thuộc vào API được cung cấp bởi dự án chung. Ngoài ra còn có các lọ bên thứ 3 (ví dụ ổi) được cả hai dự án sử dụng.

tôi sẽ tạo ra 3 dự án maven: a parent tập hợp mô-đun, một module common-project và một application-project mô-đun tùy thuộc vào common-project và tuyên bố ổi như phụ thuộc vào parent mô-đun (để dự án con sẽ thừa hưởng nó). Một cái gì đó như thế này:

 
$ tree Q3337426 
Q3337426 
├── application-project 
│   ├── pom.xml 
│   └── src 
│    ├── main 
│   └── ... 
│    └── test 
│     └── ... 
├── common-project 
│   ├── pom.xml 
│   └── src 
│    ├── main 
│   └── ... 
│    └── test 
│   └── ... 
└── pom.xml 

Trường hợp pom.xml mẹ trông như thế này:

<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>com.stackoverflow.Q3337426</groupId> 
    <artifactId>Q3337426</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>Q3337426 - Root</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>r05</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    <modules> 
    <module>common-project</module> 
    <module>application-project</module> 
    </modules> 
</project> 

Các pom.xml cho phổ biến dự án:

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <artifactId>Q3337426</artifactId> 
    <groupId>com.stackoverflow.Q3337426</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <artifactId>common-project</artifactId> 
    <name>Q3337426 - Common Project</name> 
    <dependencies/> 
</project> 

Các pom.xml cho dự án ứng dụng:

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <artifactId>Q3337426</artifactId> 
    <groupId>com.stackoverflow.Q3337426</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <artifactId>application-project</artifactId> 
    <name>Q3337426 - Application Project</name> 
    <dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>common-project</artifactId> 
     <version>${project.version}</version> 
    </dependency> 
    </dependencies> 
</project> 

Đây là cách Maven để tổ chức một dự án như vậy và sẽ cho phép kích hoạt một lò phản ứng được xây dựng từ dự án gốc để xây dựng mọi thứ.

(...) Cả hai dự án đều đang được phát triển tích cực, vì vậy tôi không muốn phải xây dựng một lọ chung dự án trước, sau đó "cài đặt" đó vào kho lưu trữ cục bộ của tôi trước khi tôi có thể sử dụng các tính năng trong ứng dụng dự án.

Plugin m2eclipse có thể Giải quyết phụ thuộc từ dự án Không gian làm việc (đây thực sự là hành vi mặc định). Vì vậy, nếu bạn nhập cả application-projectcommon-project, cấu hình cũ sẽ được định cấu hình phụ thuộc vào các nguồn của common-project (thay vì tùy thuộc vào bình). Các thay đổi được thực hiện cho common-project sẽ hiển thị ngay lập tức khi sử dụng thiết lập này.

Điều này sẽ giải quyết mối quan tâm của bạn bên trong IDE. Bên ngoài IDE, chạy một lò phản ứng được xây dựng trên dự án hàng đầu.

+0

Cảm ơn bạn đã phản hồi toàn diện, tôi chắc chắn sẽ xem xét vấn đề này. – MavenN00b

+0

@ MavenN00b: Bạn được chào đón. Nên khá dễ dàng để thích ứng với dự án thực sự của bạn. Hãy hỏi nếu bạn cần làm rõ. –

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