2010-12-31 22 views
13

Estamos usando ANT para nuestro proceso de compilación y no tenemos planes para cambiar esto en el futuro cercano.Use Maven solo para buscar algunos archivos jar de biblioteca

Es posible el uso de Maven para acaba de ir a buscar archivos jar Open Source comunes (por ejemplo Log4J, SWT, JFace) y ponerlos en el lugar correcto de nuestro proyecto, por lo que no tiene que almacenarlos en nuestra control de versión — preferible sin crear el Maven-cache típico en el directorio de inicio?

Respuesta

17

NO NO NO ¡Todos!

Si está utilizando Ant, la mejor forma de usar repositorios Maven para descargar dependencias jar es usar Ivy con Ant. Para eso es exactamente Ivy.

Instalar Ivy y ponerse a trabajar con los proyectos actuales de Ant es simple de hacer. Funciona con Nexus y Artifactory si los usa como sus repositorios Maven locales.

Eche un vistazo a Ivy. Probablemente es exactamente lo que quieres.

+0

O bien, las tareas de la hormiga. O usa ant para descargar artefactos de un repositorio. http://maven.apache.org/ant-tasks/index.html – michael

+0

No use maven-ant-tasks es un proyecto muy antiguo que debe ser desaprobado, tiene una resolución básica, pero cualquier cosa más allá de eso es probable que quede corto – sloven

4

En la variación de org.life.java's answer, no haría mvn install.

En cambio, en el pom.xml me gustaría añadir lo siguiente bits:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
<outputDirectory>${project.build.directory}/lib</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Ahora sólo tiene que ver mvn generate-sources, lo cual es mucho más rápido que el pleno mvn install, y todas las dependencias se copiará en el directorio especificado.


Ah por cierto, no es que lo Apache Ivy se trata? ¿Extendiendo a Ant para que entienda la gestión de dependencia de Maven?

+0

+1 para Apache Ivy – Goibniu

+0

No sé sobre Apache Ivy tampoco. ¿Es posible copiar ciertas bibliotecas aquí y otras allí? – Mot

+1

@mklhmnn Nunca lo he intentado con Ivy. Soy un usuario experto que a veces usa la hormiga, y no al revés, así que no sería el público objetivo de Ivy.Pero aquí hay una cita de la página de características: 'Apache Ivy se puede usar para llevar la función de administración de dependencias de Apache Maven ™ a los archivos de compilación de Apache Ant, para aquellos que ya usan Apache Ant y que no quieren configurar un Apache Proyecto Maven. Pero Apache Ivy no se detiene allí, ¡ofrece muchas más funciones excelentes! http://ant.apache.org/ivy/features.html –

4

Es posible, debe usar maven-ant-tasks.

En particular su tarea dependencies ant. Con esta configuración, no se requiere la instalación de Maven.

<?xml version="1.0" encoding="UTF-8"?> 
<project 
    name="download-dependency" 
    basedir="." 
    default="download-dependency" 
    xmlns:artifact="antlib:org.apache.maven.artifact.ant" 
> 
    <target name="download-dependency"> 

    ... define properties ... 

    <taskdef 
     resource="org/apache/maven/artifact/ant/antlib.xml" 
     uri="antlib:org.apache.maven.artifact.ant" 
    /> 

    <artifact:dependencies> 
     <localRepository path="${local-repo.dir}"/> 
     <remoteRepository id="central" url="${repository-uri}"/> 
     <dependency 
     groupId="${groupId}" 
     artifactId="${artifactId}" 
     version="${version}" 
     type="${type}" 
     classifier="${classifier}" 
     scope="runtime" 
     /> 
    </artifact:dependencies> 
    </target> 
</project> 

El único binario usted debe comprobar en su proyecto es maven-ant-tasks.jar.

En realidad, en nuestro proyecto utilicé Sonatype Nexus (documentation) Maven gestor de repositorios para centralizar el acceso a diferentes repositorios e incluso mantener algunos binarios únicos en nuestro entorno. Con la ayuda de Nexus, simplemente busco maven-ant-tasks.jar con la tarea <get> de ant desde una URL conocida. No tiene que usar Nexus, pero acelera enormemente las compilaciones, ya que almacena en caché los archivos binarios cercanos a las máquinas de su desarrollador.

2

Ivy hace precisamente esto, cuando Bootstraps sí:
http://ant.apache.org/ivy/history/latest-milestone/samples/build.xml

<property name="ivy.install.version" value="2.0.0-beta1"/> 
<property name="ivy.jar.dir" value="lib"/> 
<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/> 
<target name="resolve" unless="skip.download"> 
    <mkdir dir="${ivy.jar.dir}"/> 
    <echo message="installing ivy..."/> 
    <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/> 
</target> 
Cuestiones relacionadas