Estoy tratando de configurar un proyecto Maven de varios módulos, y las dependencias entre módulos aparentemente no se están configurando correctamente.
Yo tengo:
<modules>
<module>commons</module>
<module>storage</module>
</modules>
en el POM padre (que tiene un pom de tipo empaquetado) y luego en los subdirectorios commons/
y storage/
que definen los poms JAR con el mismo nombre.
El almacenamiento depende de Commons.
En el directorio principal (maestro), ejecuto mvn dependency:tree
y veo:
[INFO] Building system
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] domain:system:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] Building commons
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
...correct tree...
[INFO] ------------------------------------------------------------------------
[INFO] Building storage
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) domain:commons:jar:1.0-SNAPSHOT
¿Por qué falla la dependencia de los "comunes", a pesar de que el reactor obviamente lo ha visto porque procesa con éxito su árbol de dependencia? Definitivamente no debería ir a la red para encontrarlo, ya que está allí ...
El pom para almacenamiento:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<parent>
<artifactId>system</artifactId>
<groupId>domain</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>domain</groupId>
<artifactId>storage</artifactId>
<name>storage</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- module dependencies -->
<dependency>
<groupId>domain</groupId>
<artifactId>commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- other dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
¡Gracias por cualquier sugerencia!
(Editar)
Para aclarar, lo que estoy buscando aquí es esto: no quiero tener que instalar el módulo X para construir el módulo Y que depende de X, dado que ambos son módulos referenciados desde el mismo POM principal. Esto tiene sentido intuitivo para mí que si tengo dos cosas en el mismo árbol de fuentes, no debería tener que instalar productos intermedios para continuar con la compilación. Ojalá mi pensamiento tenga algún sentido aquí ...