2010-08-16 5 views
10

Ist es möglich, eine Abhängigkeit in der Pom so zu definieren, dass es den Umfang des Systems hat, aber auf mehrere Gläser zeigt?Maven: Systemabhängigkeit, die auf mehrere Gläser zeigt

Ich bin mir sicher, das ist ziemlich unorthodox, aber ich habe mich nur gefragt, ob das überhaupt möglich war. So etwas wie:

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

Antwort

7

Erste (und ich werde es nie genug wiederholen), mit system Abhängigkeiten scoped ist entmutigt, wenn Sie nicht genau wissen, was Sie tun. Von Dependency Scopes:

System: Diese Abhängigkeit ist in einiger Phase Ihres Projektlebenszyklus erforderlich, aber systemspezifisch. Nutzung dieses Rahmen wird abgeraten: Dies gilt eine „fortgeschrittene“ Art Feature und soll nur verwendet werden, wenn Sie wirklich alle Verästelungen ihrer Verwendung verstehen, , die extrem schwer, wenn nicht sein können eigentlich unmöglich quantifizieren. Dieser Bereich per Definition macht Ihren Build nicht tragbar. In bestimmten Edge Fällen kann es notwendig sein. Der Systembereich enthält das Element <systemPath>, das auf den physischen Standort dieser Abhängigkeit von der lokalen Maschine zeigt. Es wird so verwendet, um auf einige Artefakte zu verweisen, die auf der gegebenen lokalen Maschine erwartet werden, die nicht in einem Repository vorhanden ist; und deren Pfad kann variieren Maschine-zu-Maschine. Das systemPath Element kann sich auf Variable in seinem Pfad beziehen: ${JAVA_HOME} zum Beispiel. Jetzt

, streng Ihre Frage zu beantworten, eine Abhängigkeit mit einem system Umfang erklärt, der auf mehrere Gläser zeigen würde, ist „möglich“ IF die Abhängigkeit einen MANIFEST.MF Auflistung andere JAR-Dateien relativ in seinem Class-Path Eintrag hat. So etwas wie diese (die „root“ Abhängigkeit der Annahme ist in lib):

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

aber ich weiß nicht, diesen Ansatz empfehlen, vor allem in Ihrem speziellen Fall. Sehen Sie sich stattdessen previous answer an, wo ich die Einrichtung eines dateibasierten Repositorys beschreibe.

3

habe ich noch nie getan, aber nach Maven Kernkonzepten, ich glaube es nicht möglich sein kann, weil jeder Artefakt, das durch eine einzelne Einheit dargestellt wird (ein Glas, zip, tar, etc. .). Daher ist es möglicherweise nicht möglich, mehrere Gläser zu haben, die ein einzelnes Artefakt darstellen.

Mehr system scope Abhängigkeiten sind immer verfügbar und nicht im Repo nachgeschlagen. Diese sollten nur beschränkt auf Jvm oder jdk Abhängigkeiten (die nun von der jdk vorgesehen sind, aber früher waren als separate Downloads)

8

Soweit ich verstehe, suchen Sie nach einer einfachen Möglichkeit, Abhängigkeiten zu lokalen JAR-Dateien zu verwalten (in Ihrem Fall im Ordner $ {basedir}/lib/foo/'). Mit addjars-maven-plugin das ist einfach. Fügen Sie einfach die folgende Erklärung zu Ihrem Pom hinzu:

<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

cool Plugin. danke – ufk

+2

addjars-maven-plugin benötigt Maven Version 3.0. – SKR

Verwandte Themen