Ich habe ein Multi-Modul-Projekt in Maven, das richtig kompiliert, aber nicht richtig verpackt.So verpacken Sie mehrere Module Maven-Projekt mit verschachtelten Modulen
Im Haupt Maven pom.xml
, schließe ich die Module wie folgt aus:
<modules>
<module>module1</module>
<module>module1/test</module>
<module>module2</module>
<module>module2/test</module>
...
<module>moduleN</module>
<module>moduleN/test</module>
</modules>
Im Gegensatz zu Maven Konventionen Dieses Projekt hat seine Testquelle Bäume als separate Module kompiliert haben, weil die Kompilierung Abhängigkeiten für den Test Code unterscheidet sich von den Abhängigkeiten des Hauptquellcodes. Die Lösung besteht also darin, alle Testmodule so einzurichten, dass sie von den Hauptquellenmodulen abhängig sind, um sicherzustellen, dass sie in der richtigen Reihenfolge kompiliert werden.
Die Verzeichnisstruktur für dieses Projekt ist sehr nicht standardisiert. Ich habe die pom.xml an Orten platziert, wo ich denke, dass sie gehören. Ich kann diese Verzeichnisstruktur jedoch nicht ändern - das liegt außerhalb meiner Kontrolle. Es ist wie folgt:
/
+- pom.xml
+- module1/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1.java
+- test/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1Test.java
...
Hier ist, was die pom.xml für ein reguläres Quellmodul aussieht. Das funktioniert perfekt:
<?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>
Hier ist die pom.xml für ein Testmodul ist:
<?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>
Da jedoch das Testmodul ein Unterverzeichnis des Hauptmoduls ist, erhalte ich die folgende Fehler, wenn es versucht, module.test zu verpacken:
[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]
aus irgendeinem Grund Maven denkt, dass es dieses Glas aus einem Repository holen muss, auch wenn es gebaut es nur vorher ....
Muss ich die pom.xml in module1/test auf eine übergeordnete Ebene wie die anderen verschieben? Wie kann ich das beheben, ohne die pom.xmls zu verschieben?
Dank
Warum können Sie die Verzeichnisstruktur nicht ändern? Dies wird eine Menge Schmerzen mit Maven verursachen. Es ist einfacher, die Struktur in das Standard-Maven-Layout zu ändern. – khmarbaise
Sind Sie sicher, dass diese 2 Module im selben Reaktor oder 'com.company: modul1: jar: 5.3.1-SNAPSHOT' im lokalen Repo installiert sind? –
Ich lief dein Setup und hatte keine Probleme. Auf der anderen Seite weiß ich nicht genau, wie dein Elternteil aussieht. Könntest du das auch posten? – maba