Tôi có một dự án đa mô-đun trong Maven biên dịch chính xác, nhưng không gói chính xác.Cách gói dự án maven đa mô-đun với các mô-đun lồng nhau
Trong maven chính pom.xml
, tôi bao gồm các phân hệ như thế này:
<modules>
<module>module1</module>
<module>module1/test</module>
<module>module2</module>
<module>module2/test</module>
...
<module>moduleN</module>
<module>moduleN/test</module>
</modules>
Không giống như các công ước maven, dự án này phải có cây nguồn thử nghiệm của nó biên dịch như là một module riêng biệt, vì sự phụ thuộc biên dịch cho kỳ thi mã khác với các phụ thuộc của mã nguồn chính. Vì vậy, giải pháp là thiết lập tất cả các mô-đun thử nghiệm để phụ thuộc vào bất kỳ mô-đun nguồn chính nào để đảm bảo chúng được biên dịch theo đúng thứ tự.
Cấu trúc thư mục cho dự án này rất không chuẩn. Tôi đã đặt pom.xml ở những vị trí mà tôi nghĩ chúng thuộc về. Mặc dù vậy, tôi không thể thay đổi cấu trúc thư mục này - nó nằm ngoài tầm kiểm soát của tôi. Nó giống như sau:
/
+- pom.xml
+- module1/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1.java
+- test/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1Test.java
...
Đây là những gì pom.xml cho mô-đun nguồn thông thường. Đây hoạt động hoàn hảo:
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>project</artifactId>
<version>5.3.1-SNAPSHOT</version>
</parent>
<artifactId>module1</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>modulex</artifactId>
<version>${product.version}-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
...
</build>
</project>
Đây là pom.xml cho một module kiểm tra:
<?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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>project</artifactId>
<version>5.3.1-SNAPSHOT</version>
<!-- I was forced to do this because this module was 2 levels deep -->
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>module1.test</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>module1</artifactId>
<version>${product.version}-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>src</testSourceDirectory>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
...
</build>
</project>
Tuy nhiên, kể từ khi mô-đun thử nghiệm là một tiểu thư mục của module chính, tôi nhận được như sau lỗi khi nó cố gắng gói module.test:
[ERROR] Failed to execute goal on project module1.test: Could not resolve dependencies for project com.company:module1.test:jar:5.3.1-
SNAPSHOT: Could not find artifact com.company:module1:jar:5.3.1-SNAPSHOT in repo1.maven.org (http://repo1.maven.org/maven2/) -> [Help 1]
Đối với một số lý do, Maven nghĩ nó cần phải lấy lọ này từ một kho lưu trữ, mặc dù nó chỉ xây dựng nó trước đây ....
Tôi có cần phải di chuyển tệp pom.xml trong mô-đun 1/kiểm tra đến cấp độ gốc như cấp độ khác không? Làm thế nào tôi có thể sửa lỗi này mà không cần di chuyển tệp pom.xml?
Cảm ơn
Tại sao bạn không thể thay đổi cấu trúc thư mục? Điều này sẽ gây ra rất nhiều đau đớn với Maven. Việc thay đổi cấu trúc sang bố cục thư mục mặc định của Maven sẽ đơn giản hơn. – khmarbaise
Bạn có chắc chắn rằng 2 mô đun này được xây dựng trong cùng một lò phản ứng hoặc 'com.company: module1: jar: 5.3.1-SNAPSHOT' được cài đặt trong repo cục bộ không? –
Tôi đã chạy thiết lập của bạn và không có vấn đề gì. Mặt khác, tôi không biết chính xác bố mẹ bạn trông như thế nào. Bạn có thể đăng bài đó không? – maba