2010-08-16 15 views
10

¿Es posible definir una dependencia en el pom de manera que tenga el alcance del sistema pero apunte a varios jars?Maven: dependencia del sistema que apunta a varios jar

Estoy seguro de que esto es bastante poco ortodoxo, sin embargo, me preguntaba si esto era posible. Así que algo como:

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

Respuesta

7

En primer lugar (y nunca voy a repetir lo suficiente), utilizando system con ámbito dependencias es desalentado a menos que sepa exactamente lo que está haciendo. De Dependency Scopes:

sistema: Esta dependencia se requiere en alguna fase del ciclo de vida de su proyecto , pero es específicos del sistema. El uso de este ámbito se desanima: Esto se considera una especie "avanzada" de la función y debe sólo se puede utilizar cuando realmente entender todas las ramificaciones de su uso, que puede ser extremadamente difícil, si no realidad imposible cuantificar. Este ámbito, por definición, hace que su compilación no sea portátil. Puede ser necesario en ciertos casos de borde. El alcance del sistema incluye el elemento <systemPath> que apunta a la ubicación física de esta dependencia en la máquina local. Es , por lo tanto, se utiliza para referirse a algún artefacto que se espera que esté presente en la máquina local dada y no en un repositorio; y cuya ruta puede variar máquina a máquina. El elemento systemPath puede hacer referencia a las variables de entorno en su ruta: ${JAVA_HOME} por ejemplo.

Ahora, para responder estrictamente a su pregunta, se declara una dependencia con un alcance system que apunte en varios frascos que es "posible" SI la dependencia tiene una lista MANIFEST.MF otros JAR relativamente en su entrada Class-Path. Algo como esto (suponiendo que la dependencia "raíz" está en lib):

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

pero no recomienda este enfoque, especialmente en su caso particular. En su lugar, eche un vistazo a este previous answer donde describo cómo configurar un repositorio basado en archivos.

3

que nunca he hecho esto, pero de acuerdo a los conceptos fundamentales de Maven, creo que puede no ser posible debido a que cada artefacto está representado por una única entidad (un frasco, zip, tar, etc. .). Por lo tanto, puede que no sea posible tener múltiples jar que representen un único artefacto.

Morever system scope se supone que las dependencias siempre están disponibles y no se buscaron en el repositorio. Estos deben ser limitadas sólo a JVM o dependencias relacionadas con JDK (que ahora son proporcionados por el JDK, pero estaban antes disponibles como descargas separadas)

8

Por lo que tengo entendido, usted está buscando una manera simple de administrar las dependencias de los archivos jar locales (ubicados en la carpeta '$ {basedir}/lib/foo /' en su caso). Usando addjars-maven-plugin eso es simple. Simplemente agregue la siguiente declaración a su 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

complemento genial. gracias – ufk

+2

addjars-maven-plugin requiere Maven versión 3.0. – SKR

Cuestiones relacionadas