2016-06-09 21 views
7

Używam BOM do importowania zależności z innego projektu do kopalni i potrzebuję sposobu na odniesienie do wersji zależności, która jest już zadeklarowana we wspomnianym BOM. Do tej pory próbowałem wyświetlić listę wersji zależności jako właściwość w zestawieniu komponentów, ale to podejście nie powiedzie się, ponieważ właściwości nie są importowane z listami materiałowymi.Czy Maven ma sposób na uzyskanie wersji zależności jako własności?

Widziałem gdzie dependency:properties celem zależność pluginu robi prawie dokładnie to, czego potrzebuję, ale zamiast dać mi pełną ścieżkę artefaktu muszę wersję jako właściwość. Czy jest coś, co może dać mi wersję rozwiązanego artefaktu jako własności?

AKTUALIZACJA - "Dlaczego nie użyć pom?

ja zwykle znaleźć sobie pracy w środowiskach serwerów aplikacyjnych, gdzie Zależności przewidziane są określone z artefaktów BOM (jak wydaje się, że stało się to dość powszechne/standardowy sposób rozpowszechniać grupy artefaktów powiązanych ze sobą, tzn widlfly) . W związku z tym chcę traktować BOM jako jedno źródło prawdy. Pomysł na zrobienie czegoś takiego jak wersja wersji zależności, która została już zdefiniowana w zestawieniu komponentów, wydaje się niepoprawny. Powrót na górę

Gdybym miał zdefiniować właściwości w pom macierzystym, które odzwierciedlały środowisko serwera aplikacji, teraz muszę się martwić o utrzymanie właściwości pom macierzystych i właściwości BOM w synchronizacji - dlaczego w ogóle mieć w tym miejscu zestawienie komponentów?

informacja jest już dostępna na drzewie zależności, to tylko kwestia wystawiania go ...

+0

Zwykłe podejście to posiadanie wspólnego rodzica (http://www.avajava.com/tutorials/lessons/how-do-i-manage-the-version-of-a-dependency-in-a-parent- pom.html) ([przykład IRL] (https://github.com/spring-projects/spring-boot/blob/master/spring-boot-dependencies/pom.xml)), który definiuje wszystkie wersje. – zapl

+0

@zapl - patrz edycja, pracuję konkretnie z zestawieniem komponentów. – JoshC13

+0

Dlaczego chcesz używać właściwości dla zależności, ponieważ jest ona zdefiniowana przez zestawienie komponentów w zarządzaniu zależnościami, więc nie musisz definiować wersji. Dlaczego musisz odwołać się do zależności? – khmarbaise

Odpowiedz

7

Nie można znaleźć żadnej istniejącej funkcji lub funkcji wtyczki dla tego, więc rozwinąłem starszą zależność-maven-plugin i zmodyfikowałem ją, aby używać wersji.Teraz mogę wpaść wtyczki tak:

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

i dostępu właściwości tak:

GroupID: artifactId: typ [: klasyfikator] .version

CZYLI

io.undertow: cofająca-core: jar.version = 1.3.15.Final

Zapoznaj się z README uzyskać więcej informacji na temat korzystania z wtyczki. Jest ona dostępna @Maven Central:

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

... wtyczek w dół ...

+0

To, co zamówił lekarz, dzięki! –

3

Krótka odpowiedź - tak, można.

W szczegółach, Twój 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> 

w modułach pom.xml:

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

Również można użyć $ {slf4j.version} wartość filtrowanie zasobów lub w plugin konfiguracje.

Aktualizacja

W przypadku, gdy nie można wykorzystać właściwości w POM macierzystej, można

  • retreive wszystkie zależności i ich wersje z dependency:list wtyczki; lub
  • używać razem zależność: list + antrun: uruchom plugin; lub
  • skonfigurować skrypty serwera CI, aby zrobić to za Ciebie (np. z przykładem this); lub
  • napisać niestandardową wtyczkę do obsługi logiki wersji.
+0

Pierwsze zdanie pytania - "Używam BOM do importowania zależności". Gdybym korzystał z zabawki dla rodziców, nie stanowiłoby to problemu. Mój problem polega na tym, że właściwości nie są importowane z zależności BOM, ale wersje tych zależności działają. – JoshC13

+0

Ta odpowiedź została już wyrażona w kilku innych pytaniach dotyczących S/O dotyczących sposobu udostępniania właściwości. TO ZNACZY. http://stackoverflow.com/questions/1231561/how-to-share-common-properties-among-several-maven-projects – JoshC13

+0

Zaktualizowałem odpowiedź. Mam nadzieję, że to pomoże. – ursa

0

Plugin Maven jest Github (https://github.com/semper-reformanda/dependencyversion-maven-plugin) i to jest koniecznością dla każdego, kto zajmuje się wersjami zależności, na przykład podczas korzystania z zależności Webjars - możesz wstrzykiwać numery wersji Webjar bezpośrednio do zasobów sieciowych.

I szukał takiej funkcjonalności przez długi czas, mam nadzieję, że więcej ludzi przyjdzie po nim i że robi się na Maven centralny (I rzeczywiście, że powinno pochodzić z Maven wyjęciu z pudełka)

+0

Zobacz moją odpowiedź - napisałem wtyczkę, ponieważ nie mogłem znaleźć tej funkcji. Ale dzięki za miłe słowa ;-) – JoshC13