En nuestro proyecto Maven, estamos tratando la siguiente estructura de directorios (con cerca de 80 proyectos en total, sólo unos pocos se muestran de manera que se entiende la idea):Maven reutilización en poms
myappli (pom)
-- module1 (pom)
--|-- utils (pom)
--|-- ejb (pom)
--|--|-- myappli-module1-a-ejb (jar)
--|--|-- myappli-module1-b-ejb (jar)
--|-- war (pom)
--|-- applet (pom)
...
-- module6 (pom)
--|-- utils (pom)
--|-- ejb (pom)
--|--|-- myappli-module6-c-ejb (jar)
--|-- war (pom)
--|-- applet (pom)
Nota: Esta es una estructura plana para Maven, ya que todos los proyectos que no son hojas tienen un valor
packaging
de "pom". (cf BetterBuildsWithMaven book).
Definimos las versiones de dependencia en "dependencyManagement
", en el "myappli
" pom. Esto funciona bien
Nuestro problema es con la reutilización de las dependencias en sí. Por ejemplo, las dependencias ejb son comunes a todos los proyectos ejb (por diseño). ¡No queremos cortar en pegar, y mantener todo eso con cada cambio!
Estábamos pensando en utilizar alguna "noción de importación" para las dependencias ejb y definir nuestras dependencias ejb una vez en el nivel de la aplicación. Nuestros intentos fallidos fueron:
- El Maven "
parent pom
" idea estaría bien, pero ya es utilizado por los módulos, por lo que no está disponible para nuestras necesidades. - No se encontraron dispositivos de importación en Maven (excepto por la administración de dependencia)
La definición de entidad XML no se reconoce. Probamos un pom como la siguiente, y conseguimos el error
"Reason: Parse error reading POM. Reason: could not resolve entity named 'ejbDependencies'
":<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project [
<!ENTITY ejbDependencies SYSTEM "./ejbDependencies.txt">
]>
<project ...
...
&ejbDependencies;
...
Editado: Estoy intentando la solución sugerida por Robert, pero algo anda mal.
Cuando compilo mi proyecto ejb, no encuentra las dependencias mismas. Aparece un error al compilar (compilación mvn), diciendo que falta el paquete javax.ejb.
Nota: He ejecutado "mvn install" en el proyecto de dependencias antes.
Esta es mi configuración:
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>myproj-maven</artifactId>
<version>3.1-SNAPSHOT</version>
</parent>
<groupId>com.company</groupId>
<artifactId>myproj-maven-ejb</artifactId>
<version>${myproj-version}</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb</artifactId>
</dependency>
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc</artifactId>
</dependency>
</dependencies>
</project>
---------------------------------
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.company</groupId>
<artifactId>myproj-identite-ejb</artifactId>
<version>3.1-SNAPSHOT</version>
</parent>
<groupId>com.company</groupId>
<artifactId>myproj-identite-metier</artifactId>
<name>SNR IDENTITE METIER</name>
<version>2.0.1</version>
<packaging>ejb</packaging>
<dependencies>
<dependency>
<groupId>com.company</groupId>
<artifactId>myproj-maven-ejb</artifactId>
<version>${myproj-version}</version>
<type>pom</type>
</dependency>
</dependencies>
</project>
No sé si ha cambiado algo, pero tenemos una jerarquía que relaciona las dos poms.
Tenemos una estructura Maven estricta, donde cada directorio declara todos los subdirectorios como módulos maven, y cada subdirectorio declara el padre como un padre maven.
Y el directorio padre común es parte de esta estructura.
+---maven
| \---ejb
+---identite
| +---ejb
| | \---SNR_IDENTITE_METIER
Editado:
La respuesta dada por el filón parece correcto. Es imposible hacerlo con Maven, porque se proporcionan nuestra dependencia, y por lo tanto no transitiva :-(
Realmente tenemos muchos problemas en la configuración de hasta Maven. Así que muchas pequeñas cosas simplemente no funcionan. Hoy me he encontrado ! que el objetivo sitio no puede manejar propiedades, que estamos utilizando para números de versión
+1 es la razón de hecho, una pequeña prueba lo demostró. Gracias. – KLE