Pregunta

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):

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: Este es un plana estructura para Maven, como todos los proyectos que no son hojas tienen un valor de packaging "pom". (Cf BetterBuildsWithMaven libro).

Definimos las versiones de dependencia en "dependencyManagement", en el pom "myappli". Esto funciona bien.

Nuestro problema es con la reutilización de las mismas dependencias . Por ejemplo, las dependencias EJB son comunes a todos los proyectos EJB (por diseño). No queremos a Cut'n pegar, y mantener todo lo que con cada cambio!

Hemos pensado utilizar algún " importación noción " para las dependencias EJB, y definir nuestras dependencias EJB vez a nivel de aplicación. Nuestros intentos infructuosos fueron los siguientes:

  • El "parent pom" noción Maven estaría bien, pero ya es utilizado por los módulos, por lo que no está disponible para nuestras necesidades.
  • No hay instalaciones de importación se encuentran en Maven (a excepción de DependencyManagement)
  • 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 tratando la solución sugerida por Robert, pero algo está mal.

Cuando compilo mi proyecto EJB, que no encuentra las mismas dependencias. Me aparece un error al compilar (mvn compile), diciendo que el paquete de javax.ejb falta.

  

Nota:. Lo hice correr "mvn instalar" en el proyecto antes de dependencias

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 estricta Maven, donde cada directorio declara todos los subdirectorios como módulos Maven, y cada subdirectorio declara el padre como padre experta.
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. Tantas pequeñas cosas simplemente no funcionan. Hoy descubrí que el objetivo sitio no puede manejar propiedades, que estamos utilizando para números de versión!

¿Fue útil?

Solución

¿Sus dependencias importados tienen un siempre alcance? De hecho, este alcance no es transitivo (ver Maven Dependencia Scopes ).

Esta podría ser la razón de la no sustitución.

Otros consejos

Puede utilizar dependencias del pom para importar dependencias en proyectos arbitrarias.

Un proyecto POM puede ser similar a:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernateVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>${hibernateAnnotationsVersion}</version>
    </dependency>
  </dependencies>
</project>

Y se importa como:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <type>pom</type>
</dependency>

Maven, la definitiva guía - La agrupación de dependencias para detalles

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top