Mavenに、正しくコンパイルされるマルチモジュールプロジェクトがありますが、正しくパッケージ化されていません。
メインのMavenpom.xml
には、次のようなモジュールが含まれています。
<modules>
<module>module1</module>
<module>module1/test</module>
<module>module2</module>
<module>module2/test</module>
...
<module>moduleN</module>
<module>moduleN/test</module>
</modules>
Mavenの規則とは異なり、テストコードのコンパイルの依存関係はメインのソースコードの依存関係とは異なるため、このプロジェクトではテストソースツリーを個別のモジュールとしてコンパイルする必要があります。したがって、解決策は、すべてのテストモジュールをセットアップして、メインのソースモジュールに依存し、正しい順序でコンパイルされていることを確認することです。
このプロジェクトのディレクトリ構造は非常に非標準的です。私はpom.xmlをそれらが属すると思う場所に配置しました。ただし、このディレクトリ構造を変更することはできません。制御できません。これは次のようなものです。
/
+- pom.xml
+- module1/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1.java
+- test/
+- pom.xml
+- src/
+- com/
+- company/
+- Module1Test.java
...
通常のソースモジュールのpom.xmlは次のようになります。これは完全に機能します:
<?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>
テストモジュールのpom.xmlは次のとおりです。
<?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>
ただし、テストモジュールはメインモジュールのサブディレクトリであるため、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]
何らかの理由で、Mavenは、以前にビルドしたばかりであるにもかかわらず、リポジトリからこのjarをフェッチする必要があると考えています。
module1 / testのpom.xmlを他のレベルと同じように親レベルに移動する必要がありますか?pom.xmlを移動せずにこれを修正するにはどうすればよいですか?
ありがとう