Comment package multi-module de projet maven avec imbriqué modules

J'ai un multi-module de projet Maven qui compile correctement, mais ne pas emballer correctement.

Dans les principaux maven pom.xml, je comprend les modules suivants:

<modules>
    <module>module1</module>
    <module>module1/test</module>
    <module>module2</module>
    <module>module2/test</module>
    ...
    <module>moduleN</module>
    <module>moduleN/test</module>
</modules>

À la différence des conventions de maven, ce projet doit avoir sa source de test des arbres compilés en tant que modules distincts, car les dépendances pour compiler le code de test diffèrent des dépendances de la principale source code. Donc la solution est l'installation de tous les modules de test dépendent quelle que soit la principale source de modules pour s'assurer qu'ils sont compilés dans le bon ordre.

La structure de répertoire pour ce projet est très non-standard. J'ai mis le pom.xml's dans des endroits où je pense qu'ils appartiennent. Je ne peux pas changer cette structure de répertoire que - c'est hors de mon contrôle. Il est comme ça:

/
+- pom.xml
+- module1/
   +- pom.xml
   +- src/
      +- com/
          +- company/
             +- Module1.java
   +- test/
      +- pom.xml
      +- src/
          +- com/
             +- company/
                +- Module1Test.java
...

Voici ce que l'pom.xml pour une source régulière module ressemble. Cela fonctionne parfaitement:

<?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>

Ici est la pom.xml pour un module de test:

<?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>

Cependant, depuis le module de test est un sous-répertoire du module principal, j'obtiens les erreurs suivantes une fois qu'il essaie de package 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]

Pour une raison quelconque, Maven pense qu'il doit chercher ce pot à partir d'un référentiel, même si il vient de construire antérieurement....

Dois-je déplacer le pom.xml dans module1/test à un niveau parent comme les autres? Comment puis-je résoudre ce problème sans avoir à déplacer le pom.xml s'?

Grâce

Pourquoi ne pouvez-vous pas changer la structure de répertoire? Cela va causer beaucoup de douleur avec Maven. Il est plus simple de changer la structure par défaut du dossier de présentation de Maven.
Êtes-vous sûr que ces 2 modules sont construits à l'intérieur même du réacteur ou com.company:module1:jar:5.3.1-SNAPSHOT est installé dans les locaux de pensions?
J'ai couru à votre configuration, et n'avait pas de problèmes. D'autre part, je ne sais pas exactement ce que votre parent pom ressemble. Pourriez-vous poster ainsi que une?
Il contient une description sur imbriquée maven modules. Espérons que cette aide. warpedjavaguy.wordpress.com/2011/08/08/... Vous pouvez également consulter ce lien qui explique cassé maven modules: github.com/tobrien/maven-invalid-modules

OriginalL'auteur egervari | 2012-06-28