¿Puedo usar la ruta a una dependencia de Maven como una propiedad?

Tengo una dependencia de maven en mi pom.xml como tal:

 com.foo Bar 1.2.3  

Y me gustaría usar la ruta del sistema al binario como una propiedad (para poder pasarlo a un proceso externo que inicia maven). Puedo hacer esto de una manera incómoda:

  ${settings.localRepository}/com/foo/Bar/1.2.3/Bar.jar  

Pero realmente me gustaría usar un mecanismo más estándar, como por ejemplo:

  ${com.foo:Bar:1.2.3}  

¿Algo así es posible?

Suponiendo que el artefacto com.foo:Bar:jar:1.2.3 se declara como dependencia en su POM, la siguiente propiedad devuelve la ruta al jar en el repository local:

 ${maven.dependency.com.foo.Bar.jar.path} 

Actualización: Aquí hay un POM simple que demuestra esto:

   4.0.0 com.stackoverflow q2359872 1.0-SNAPSHOT q2359872  ${maven.dependency.junit.junit.jar.path}    junit junit 3.8.1 test      maven-antrun-plugin   process-resources   ${my.lib}    run        

La ejecución de mvn process-resources produce el siguiente resultado:

 $ mvn process-resources
 [INFO] Escaneo de proyectos ...
 [INFO] ----------------------------------------------- -------------------------
 [INFO] Edificio q2359872
 [INFO] segmento de tareas: [recursos del proceso]
 [INFO] ----------------------------------------------- -------------------------
 [INFO] [recursos: recursos {ejecución: recursos predeterminados}]
 [INFO] Utilizando la encoding 'UTF-8' para copiar los recursos filtrados.
 [INFO] omita resourceDirectory / home / pascal / Projects / stackoverflow / q2359872 / src / main / resources no existente
 [INFO] [antrun: ejecutar {ejecución: predeterminado}]
 [INFO] Ejecución de tareas
      [echo] /home/pascal/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
 [INFO] Tareas ejecutadas
 [INFO] ----------------------------------------------- -------------------------
 [INFO] CONSTRUIR EXITOSO
 [INFO] ----------------------------------------------- -------------------------
 [INFO] Tiempo total: 7 segundos
 [INFO] Finalizado en: mar 02 mar 14:41:32 CET 2010
 [INFO] Memoria final: 7M / 68M
 [INFO] ----------------------------------------------- -------------------------

Aquí hay una implementación correcta, utilizando el objective de propiedades maven-dependency-plugin , que se puede usar en cualquier parte de un pom:

   4.0.0 com.stackoverflow q2359872 2.0-SNAPSHOT q2359872   ${org.jmockit:jmockit:jar}    org.jmockit jmockit 1.11    generate-sources   org.apache.maven.plugins maven-dependency-plugin 2.3    properties       org.codehaus.mojo exec-maven-plugin 1.2    exec  generate-sources    echo  path to jar= ${org.jmockit:jmockit:jar} my.lib= ${my.lib}        

Y la salida es …

 jpyeron@black /projects/wkspc/tmp/foo $ /cygdrive/c/programs.x86_64/apache-software-foundation/apache-maven-3.1.1/bin/mvn [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building q2359872 2.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.3:properties (default) @ q2359872 --- [INFO] [INFO] --- exec-maven-plugin:1.2:exec (default) @ q2359872 --- path to jar= C:\Documents and Settings\jpyeron\.m2\repository\org\jmockit\jmockit\1.11\jmockit-1.11.jar my.lib= C:\Documents and Settings\jpyeron\.m2\repository\org\jmockit\jmockit\1.11\jmockit-1.11.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.032s [INFO] Finished at: Wed Sep 17 12:07:18 EDT 2014 [INFO] Final Memory: 10M/153M [INFO] ------------------------------------------------------------------------ 

Hay un plugin que podría ser lo que estás buscando … bitstrings.org (home) .

Si no tiene ninguno de los trabajos superiores, siempre puede usar gmaven para sumergirse agresivamente en el objeto MavenProject y obtener sus infos de artefactos. En mi caso, tuve el siguiente artefacto declarado en un perfil:

    com.netoprise neo4j-connector ${neo4j.connector.version} rar  test  

Para obtener su ruta y ponerlo en una propiedad maven, escribí el siguiente script gmaven:

    org.codehaus.gmaven gmaven-plugin 1.3   get-neo4j-connector-rar-path validate  execute     artifact.getArtifactId()=='neo4j-connector' } // Now resolve dependency to produce an artifact // notice maven property interpolation doesn't do toString, so we have to do it ourselves project.properties['neo4j.connector.rarPath'] = neo4jConnector.getFile().getAbsolutePath() println "usable neoj4Connector can be found at "+project.properties['neo4j.connector.rarPath'] ]]>      

Es algún tipo de método de fuerza bruta, pero SI funciona mucho mejor que las soluciones anteriores que he visto allí.

Debe escribir un nuevo complemento maven que establezca un valor de propiedad para la ruta de acceso totalmente resuelta de una dependencia. El complemento maven-dependency-no hará eso por ti.

Copiará su dependencia en algún lugar y luego puede referirse a ella por ese nombre de ruta.