Как упаковать многомодульный проект maven -с вложенными модулями

У меня есть многомодульный проект -в Maven, который правильно компилируется, но неправильно упаковывается.

В основной maven pom.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-файл из репозитория, хотя он только что создал его ранее....

Нужно ли мне перемещать pom.xml в module1/test на родительский уровень, как и другие? Как я могу исправить это, не перемещая pom.xml?

Спасибо

6
задан egervari 28 June 2012 в 12:22
поделиться