Domanda

Nel nostro progetto Maven, stiamo cercando la seguente struttura di directory (con circa 80 progetti totali, solo pochi sono mostrati in modo che si ottiene l'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: Questo è un piatto Struttura per Maven, come tutti i progetti non foglia hanno un valore packaging di "pom". (Cf BetterBuildsWithMaven libro).

Si definiscono le versioni di dipendenza in "dependencyManagement", nel pom "myappli". Questo funziona bene.

Il nostro problema è con il riutilizzo delle dipendenze stessi . Ad esempio, le dipendenze EJB sono comuni a tutti i progetti EJB (da disegno). Noi non vogliamo Cut'n-incolla, e mantenere tutto ciò che con ogni cambio!

Abbiamo pensato di utilizzare alcuni " Importa nozione " per le dipendenze EJB, e definire le nostre dipendenze EJB una volta a livello di applicazione. I nostri tentativi infruttuosi sono stati:

  • Il "parent pom" nozione Maven andrebbe bene, ma è già utilizzato dai moduli, quindi non è disponibile per la nostra esigenza.
  • Nessun servizio di importazione si trovano in Maven (tranne che per dependencyManagement)
  • definizione di entità XML non viene riconosciuto. Abbiamo provato un pom come la seguente, e ottenuto l'errore
    "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;
    ...


A cura : Sto cercando la soluzione suggerita da Robert, ma qualcosa non va.

Quando compilo il mio progetto EJB, ma non trova le dipendenze stessi. Ottengo un errore durante la compilazione (mvn compilazione), dicendo che il pacchetto di javax.ejb manca.

  

Nota:. Ho fatto eseguire "mvn install" sul progetto dipendenze prima di

Questa è la mia configurazione:

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

Non so se cambia qualcosa, ma abbiamo una gerarchia che mette in relazione le due pon.
Abbiamo una struttura rigorosa Maven, dove ciascuna directory dichiara tutte le sottodirectory come moduli Maven, e ogni sottodirectory dichiarano il genitore come un genitore Maven.
E la directory principale comune è parte di questa struttura.

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

A cura :

La risposta data da barriera sembra corretto. E 'impossibile fare con Maven, perché la nostra dipendenza sono forniti, e quindi non transitiva: - (

  

Abbiamo davvero molti problemi con l'installazione fino Maven. Tante piccole cose non funzionano. Oggi ho scoperto che l'obiettivo del sito non è in grado di gestire le proprietà, che stiamo usando per i numeri di versione!

È stato utile?

Soluzione

I tuoi dipendenze importati hanno un fornito campo di applicazione? In effetti questo scopo non è transitiva (vedi Maven Dipendenza Scopes ).

Questo potrebbe essere il motivo della non sostituzione.

Altri suggerimenti

È possibile utilizzare dipendenze pom per importare le dipendenze in progetti arbitrari.

Un progetto pom può essere simile 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>

E viene importato come:

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

Maven, la definitiva guida - Raggruppamento dipendenze per i dettagli

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top