2010-08-02 26 views
10

Tôi có một dự án Java Web Application lớn sử dụng Maven và tôi cần bắt đầu một dự án mới sẽ chia sẻ hầu hết cùng một mã (vì vậy tôi không phải lặp lại công việc), nhưng không phải tất cả. Tôi sẽ sao chép mã chia sẻ vào một dự án mới (hãy gọi nó là "root"). Làm thế nào để làm cho dự án ban đầu của tôi phụ thuộc vào root cho mã nguồn? Tôi không thể chỉ nói nó vì tôi muốn thay đổi nguồn trước khi biên dịch.Làm thế nào để bạn sử dụng Maven để chia sẻ mã nguồn cho hai dự án?

Trả lời

8

Bạn nên cấu trúc lại dự án của mình.

  1. Xác định mã chung
  2. Extract đó vào mô-đun maven riêng của mình
    2.1. thường là ứng dụng web là đa mô-đun, vì vậy nếu bạn định chia sẻ thư viện chung trên hai ứng dụng web, sau đó tách riêng thư viện chung thành id nhóm riêng của mình
  3. Xây dựng và cài đặt tệp jar vào kho lưu trữ của bạn
  4. thay đổi số lượng các ứng dụng web tùy thuộc vào thư viện mới của bạn
+0

Làm việc cho tôi. Cảm ơn. – teteArg

2

Tạo dự án maven chứa tất cả mã được chia sẻ của bạn. Giữ nguyên bao bì của dự án này (trong tệp pom.xml chính) làm jar. Điều này sẽ giúp làm cho loại dự án này của thư viện cho việc sử dụng của bạn.

Trong tất cả các dự án truy cập mã được chia sẻ, hãy thêm sự phụ thuộc cho dự án này theo nhu cầu của bạn. (biên dịch, cung cấp).

Bây giờ gói và cài đặt dự án được chia sẻ trước khi bạn tạo bất kỳ dự án phụ thuộc nào. Điều này sẽ thêm dự án được chia sẻ vào kho lưu trữ cục bộ của bạn, sau đó có thể được sử dụng bởi các dự án phụ thuộc của bạn.

Thêm tệp mẫu pom.xml cho các dự án được chia sẻ và phụ thuộc.

Dự án được chia sẻ pom.

<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> 
    <parent> 
    <artifactId>com.myspace.test</artifactId> 
    <groupId>com.myspace</groupId> 
    <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <groupId>com.myspace</groupId> 
    <artifactId>shared</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>shared-module</name> 
    <description>shared module which contains code shared by other modules.</description> 
</project> 

pom của dự án phụ thuộc.

<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> 
    <parent> 
    <artifactId>com.myspace.test</artifactId> 
    <groupId>com.myspace</groupId> 
    <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <groupId>com.myspace</groupId> 
    <artifactId>dependent-module</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>dependent-module</name> 
    <description>Dependent module.</description> 
    <dependencies> 
    <dependency> 
     <groupId>com.myspace</groupId> 
     <artifactId>shared</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
</project> 

Dự án phụ huynh có thể được thêm tùy chọn trong trường hợp tổ chức này được yêu cầu. Hy vọng điều này sẽ hữu ích.

0

Cài đặt mã được chia sẻ, sử dụng thiết lập bao bì hiện tại của bạn jar:

mvn install 

Sau đó, bạn có thể tạo ra một sự phụ thuộc trong pom.xml con (mã mà không được chia sẻ) từ bất cứ kho bạn cài đặt vào.

Đây là thực tiễn tốt nói chung không chỉ để tránh lặp lại công việc mà còn trong trường hợp bạn muốn thay đổi việc thực hiện các tài nguyên được chia sẻ. Bạn có thể thay đổi logic ở một nơi, cài đặt nó vào kho lưu trữ và các dự án khác phụ thuộc vào mã đó sẽ sử dụng mã mới vào lần sau khi chúng được biên dịch.

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