2010-08-16 13 views
10

Czy można zdefiniować zależność w pom tak, że ma zakres systemu, ale wskazuje na wiele słoików?Maven: Zależność systemu wskazująca na wiele słoików

Jestem pewien, że jest to dość niekonwencjonalne, ale zastanawiałem się, czy było to możliwe. Więc coś takiego:

<dependency> 
    <groupId>foo</groupId> 
    <artifactId>foo</artifactId> 
    <version>1.0</version> 
    <scope>system</scope> 
    <systemPath>${basedir}/lib/foo/*.jar</systemPath> 
</dependency> 

Odpowiedz

7

Pierwsze (i nigdy nie będę powtarzać to wystarczy), stosując system scoped zależności jest zniechęcony, chyba że wiesz dokładnie, co robisz. Od Dependency Scopes: system

: Zależność ta jest wymagana w jakiejś fazie cyklu życia Twojego projektu , ale jest od systemu. użycie tego zakresu jest odradzane: To jest uważany za „zaawansowane” rodzaj funkcji i powinny być stosowane tylko wtedy, gdy naprawdę zrozumieć wszystkie konsekwencje jego stosowania, które mogą być bardzo trudne, jeśli nie faktycznie niemożliwe określ ilościowo. Ten zakres definicji z definicji powoduje, że kompilacja nie jest przenośna. W niektórych przypadkach brzegowych może to być konieczne. Zakres systemowy obejmuje element <systemPath>, który wskazuje na jego fizyczną lokalizację zależną od lokalnej maszyny. Jest to zatem używane w ten sposób w odniesieniu do pewnego artefaktu, którego oczekuje się, że będzie obecny na podanej lokalnej maszynie, a nie w repozytorium; i których ścieżka może się różnić maszyna do maszyny. Element systemPath może odnosić się do zmiennych środowiskowych na swojej ścieżce: na przykład ${JAVA_HOME} .

Teraz, aby ściśle odpowiedzieć na to pytanie, deklarując zależność z zakresu system które wskazywałyby na kilka słoików jest „możliwe” IF zależność ma MANIFEST.MF wymieniając inne JAR względnie w jego wejścia Class-Path. Coś jak to (zakładając, „root” zależność jest w lib):

Class-Path: ../lib/bar.jar ../lib/foo.jar 

ale nie polecam tej metody, zwłaszcza w konkretnym przypadku. Zamiast tego spójrz na to previous answer, gdzie opiszę, jak skonfigurować repozytorium oparte na plikach.

3

nigdy nie zrobił tego, ale zgodnie z podstawowymi pojęciami Maven jest, myślę, że to może nie być możliwe, ponieważ każdy artefakt jest reprezentowany przez jeden podmiot (słoiku, zip, tar, etc. .). Dlatego może nie być możliwe posiadanie wielu słoików reprezentujących jeden artefakt.

Więcej niż zakłada system scope zależności są zawsze dostępne i nie są wyświetlane w repozytorium. te powinny być ograniczone tylko do JVM lub jdk związane zależnościami (które są obecnie świadczone przez JDK ale wcześniej były dostępne jako osobne pliki do pobrania)

8

O ile rozumiem, poszukujesz prostego sposobu zarządzania zależnościami do lokalnych plików jar (znajdujących się w folderze "$ {basedir}/lib/foo /" w twoim przypadku). Korzystanie z addjars-maven-plugin To proste. Po prostu dodaj następującą deklarację do swojego pom:

<plugin> 
    <groupId>com.googlecode.addjars-maven-plugin</groupId> 
    <artifactId>addjars-maven-plugin</artifactId> 
    <version>1.0.2</version> 
    <executions> 
    <execution> 
     <goals> 
      <goal>add-jars</goal> 
     </goals> 
     <configuration> 
      <resources> 
       <resource> 
        <directory>${basedir}/lib/foo</directory> 
       </resource> 
      </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+1

fajna wtyczka. dzięki – ufk

+2

addjars-maven-plugin wymaga wersji Maven 3.0. – SKR

Powiązane problemy