Question

Dans notre projet Maven, nous essayons la structure de répertoire suivant (avec environ 80 projets au total, seuls quelques-uns sont présentés de sorte que vous voyez l'idée):

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)
  

Note: Ceci est un plat la structure pour Maven, comme tous les projets non-feuilles ont une valeur packaging de "pom". (Cf livre BetterBuildsWithMaven).

Nous définissons les versions de dépendance dans "dependencyManagement", dans le pom "de myappli". Cela fonctionne très bien.

Notre problème est avec la réutilisation des dépendances eux-mêmes . Par exemple, les dépendances de EJB sont communs à tous les projets (par ejb conception). Nous ne voulons pas Cut'n-coller et maintenir tout ce que chaque changement!

Nous avons pensé à utiliser une « notion d'import » pour les dépendances de EJB, et de définir nos dépendances ejb une fois au niveau de l'application. Nos tentatives infructueuses ont été:

  • La notion de « parent pom » Maven serait bien, mais il est déjà utilisé par les modules, il est donc pas disponible pour nos besoins.
  • Aucune installation d'importation trouvée dans Maven (sauf pour dependencyManagement)
  • définition de l'entité XML est pas reconnu. Nous avons essayé un pom comme suit, et obtenu l'erreur
    "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;
    ...


Edité : Je suis en train de la solution proposée par Robert, mais quelque chose ne va pas.

Quand je compile mon projet ejb, il ne trouve pas les dépendances elles-mêmes. Je reçois une erreur lors de la compilation (compilation mvn), estimant que le paquet javax.ejb manque.

  

Note:. Je ne lance "mvn install" sur le projet de dépendances avant

Ceci est ma configuration:

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

Je ne sais pas si ça change quelque chose, mais nous avons une hiérarchie qui relie les deux poms.
Nous avons une structure Maven stricte, où chaque répertoire déclare tous les sous-répertoires sous forme de modules maven, et chaque sous-répertoire parent Déclare la en tant que parent Maven.
Et le répertoire parent commun fait partie de cette structure.

+---maven
|   \---ejb
+---identite
|   +---ejb
|   |   \---SNR_IDENTITE_METIER

Edité :

La réponse donnée par récif semble correct. Il est impossible de le faire avec Maven, parce que notre dépendance sont fournis, et donc pas transitif: - (

  

Nous avons vraiment beaucoup de problèmes avec la configuration jusqu'à Maven. Tant de petites choses ne fonctionnent pas. Aujourd'hui, je trouve que la cible du site ne peut pas gérer les propriétés, que nous utilisons pour les numéros de version!

Était-ce utile?

La solution

Vos dépendances importées ont une fourni portée? En effet, ce champ n'est pas transitive (voir Maven Scopes Dépendance ).

Cela pourrait être la raison du non-remplacement.

Autres conseils

Vous pouvez utiliser dépendances pom pour importer des dépendances dans des projets arbitraires.

Un projet pom peut ressembler à:

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

Et est importé comme:

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

Maven, définitif Guide - dépendances Groupement pour plus de détails

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top