2016-06-09 13 views
7

Sto utilizzando una distinta materiali per importare le dipendenze da un altro progetto in miniera e ho bisogno di un modo per fare riferimento alla versione di una dipendenza già dichiarata in detta BOM. Finora, ho tentato di elencare la versione delle dipendenze come una proprietà nella distinta materiali, ma questo approccio fallisce perché le proprietà non vengono importate con le BOM.Maven ha un modo per ottenere una versione di dipendenza come una proprietà?

Ho visto dove dependency:properties obiettivo del Dipendenza plugin fa quasi esattamente quello che mi serve, ma invece di darmi un percorso completo del manufatto ho bisogno la versione come una proprietà. C'è qualcosa là fuori che può darmi la versione di un artefatto risolto come una proprietà?

AGGIORNAMENTO - "Perché non utilizzare un pom genitore?"

mi comunemente trovo a lavorare in ambienti server applicativi, in cui sono specificate le dipendenze dotati di artefatti BOM (come sembra che questo è diventato un modo in qualche modo comune/standard per distribuire i gruppi di manufatti tra loro collegati, cioè widlfly) . Come tale, voglio trattare il BOM come l'unica fonte di verità. L'idea di fare qualcosa come re-delcaring una proprietà di versione di dipendenza che è già stata definita in un BOM non sembra corretta.

Se dovessi definire le proprietà in un ambiente padre che rispecchiava l'ambiente di un server delle applicazioni, ora devo preoccuparmi di mantenere sincronizzate le proprietà del pom padre e le proprietà delle BOM - perché in quel punto hanno anche un BOM?

L'informazione è già disponibile sul albero delle dipendenze, è solo una questione di esporla ...

+0

Il l'approccio usuale è afaik per avere un [genitore comune] (http://www.avajava.com/tutorials/lessons/how-do-i-manage-the-version-of-a-dipendency-in-a-parent- pom.html) ([Esempio IRL] (https://github.com/spring-projects/spring-boot/blob/master/spring-boot-dependencies/pom.xml)) che definisce tutte le versioni. – zapl

+0

@zapl - vedi modifica, sto lavorando specificatamente con una BOM. – JoshC13

+0

Perché si desidera utilizzare una proprietà per una dipendenza, perché è definita tramite il BOM in dependencyManagement, quindi non è necessario definirne la versione. Perché hai bisogno di fare riferimento alla dipendenza? – khmarbaise

risposta

7

Impossibile trovare alcuna funzionalità di plugin o di Maven per questo, quindi ho biforcato il vecchio plugin dependencypath-maven e l'ho modificato per utilizzare le versioni.Ora posso cadere in un plugin come questo:

<build> 
    . 
    . 
    <plugins> 
     . 
     . 
     <plugin> 
      <groupId>io.reformanda.semper</groupId> 
      <artifactId>dependencyversion-maven-plugin</artifactId> 
      <version>1.0.0</version> 
      <executions> 
       <execution> 
        <id>set-all</id> 
        <goals> 
         <goal>set-version</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

e accesso proprietà come questa:

groupId: artifactId: Tipo [: classificatore] .version

OSSIA

io.undertow: risacca-core: jar.version = 1.3.15.Final

Scopri i README per maggiori informazioni su come utilizzare il plugin. E 'disponibile @Maven Central:

<dependency> 
    <groupId>io.reformanda.semper</groupId> 
    <artifactId>dependencyversion-maven-plugin</artifactId> 
    <version>1.0.0</version> 
</dependency> 

... plugins fino in fondo ...

+0

Proprio quello che ha ordinato il dottore, grazie! –

3

Breve risposta - sì, è possibile.

Nel dettaglio, il vostro pom.xml root:

<properties> 
    <slf4j.version>1.7.21</slf4j.version> 
</properties> 
... 
<dependencyManagement> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    ... 
</dependencyManagement> 

Nei moduli pom.xml:

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 
    ... 
</dependencies> 

Inoltre è possibile utilizzare $ {} slf4j.version valore per filtrare le risorse o in plug-in configurazioni.

Aggiornamento

Nel caso in cui non è possibile utilizzare le proprietà in POM genitore, è possibile

  • prelevare tutte le dipendenze e le loro versioni con dependency:list plug-in; oppure
  • utilizzare insieme dipendenza: lista + antrun: eseguire il plug-in; oppure
  • configurare gli script del server CI per farlo automaticamente (ad es. con l'esempio this); oppure
  • scrivere un plug-in personalizzato per gestire la logica delle versioni.
+0

Prima frase della domanda: "Sto usando una distinta base per importare le dipendenze". Se stavo usando un pom genitore questo non sarebbe un problema. Il mio problema sta nel fatto che le proprietà non vengono importate dalle dipendenze della distinta componenti, ma le versioni di tali dipendenze lo fanno. – JoshC13

+0

Inoltre, questa risposta è già stata riportata in diverse altre domande di S/O su come condividere le proprietà. OSSIA http://stackoverflow.com/questions/1231561/how-to-share-common-properties-among-several-maven-projects – JoshC13

+0

Ho aggiornato la risposta. Spero che sia d'aiuto. – ursa

0

Questo plugin Maven è su Github (https://github.com/semper-reformanda/dependencyversion-maven-plugin) ed è un must per chiunque trattare con le versioni dipendenza, per esempio quando si utilizzano le dipendenze di Webjars, è possibile inserire i numeri di versione di Webjar direttamente nelle risorse Web.

ero stato alla ricerca di un tale funzionalità per un lungo periodo di tempo, spero che più persone vengono attraverso di esso e che si alza su Maven centrale (Io in realtà penso che dovrebbe venire con Maven out of the box)

+0

Vedere la mia risposta - Ho scritto il plug-in poiché non sono riuscito a trovare questa funzionalità. Ma grazie per le belle parole ;-) – JoshC13

Problemi correlati