2015-04-06 17 views
22

Recentemente ho lavorato su alcuni miglioramenti nel progetto sviluppato qualche tempo fa ed è quello che ho trovato. Molte dipendenze nei file pom vanno senza versioni specificate e tuttavia sono risolte. Il progetto consiste di 1 modulo radice e 2 sottomoduli. Viene utilizzato lo schema Aggregatore, il che significa che non esiste alcuna sezione di gestione delle dipendenze. Il progetto superiore semplicemente aggrega 2 moduli e questo è tutto ciò che fa. I sottoprogetti non si riferiscono a un genitore. Hanno un genitore diverso. Quello che non riesco a capire è che né i sottoprogetti né i loro genitori (di fatto, non ha dependencyManagement) specificano versioni per alcune delle dipendenze. Ad esempio:dependance maven senza versione

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>javax.mail-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>javax.mail</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>imap</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jul-to-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
</dependency> 

Qualcuno può aiutarmi a capirlo? Sembra che Maven gestisca il controllo delle versioni con alcune strategie predefinite.

+0

potresti mostrare l'output di 'mvn -version' solo per essere sicuro? –

+2

È impossibile che Maven funzioni senza definire le versioni delle risorse. Dovrebbero essere definiti da qualche parte nel tag 'dependencyManagement' nel sottomodulo o genitore. Si prega di controllare la tua gerarchia pom. Usa la guida di mvn: effective-pom – Ozgen

+1

Hai controllato tramite 'mvn help: effective-pom -Doutput = result.xml' e controlla se non c'è dependencyManagement. – khmarbaise

risposta

18

Ok, penso che risponderò io stesso. Naturalmente ho dato un'occhiata alla dipendenza: albero, ma tutte le dipendenze di cui ho parlato in cui i membri del primo livello dell'albero. Quello che sono riuscito a notare subito, è che dependencyManagement non è presente nel genitore, ma è comunque presente nei moduli, e ciò che è più interessante che contiene:

 <dependency> 
      <groupId>io.spring.platform</groupId> 
      <artifactId>platform-bom</artifactId> 
      <version>1.0.2.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

Non ho mai usato IO Piattaforma Primavera prima, quindi questo è un concetto totalmente nuovo per me. A quanto pare la piattaforma include alcune dipendenze preconfigurate: http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions

+1

Questo non è correlato a Spring ma è il pattern BOM "bill of Materials", che viene utilizzato per definire le dipendenze richieste per l'utilizzo di alcune librerie. Vedi [Meccanismo delle dipendenze di Maven] (https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html) – estani

13

È impossibile che Maven funzioni senza definire le versioni degli artefatti. Dovrebbero essere definiti da qualche parte nel tag dependencyManagement nel sottomodulo o nel genitore. Si prega di controllare la tua gerarchia pom. Utilizzare mvn help:effective-pom nella directory del sottomodulo del progetto. È inoltre possibile utilizzare mvn dependency:tree per scoprire quali elementi, insieme alle informazioni complete sugli artefatti, inclusi i numeri di versione, vengono risolti nel risultato della gestione delle dipendenze.

Problemi correlati