¿Descarga todas las dependencias de Maven a un directorio que NO está en el repositorio?

127

Comencé a convertir mi proyecto en maven porque necesitaba usar una biblioteca que se distribuía en forma binaria solo sobre maven, pero después de golpearme la cabeza contra la pared durante demasiado tiempo, decidí dejar de lastimarme y simplemente usar Hormiga. Me gustaría que Maven descargue el archivo jar y todas sus dependencias transitivas en un directorio de mi elección para que pueda registrarlas en mi SCM como normalmente disfruto y ser un desarrollador maravilloso nuevamente.
¿Alguna idea de cómo hacer eso fácilmente?

chubbsondubs
fuente
2
Considere usar Ivy y obtenga la gestión de dependencia transitiva que necesita, con la hormiga en la que confía. O muerda la viñeta y use la estructura de directorios de Maven.
Dave Newton
¿Has probado Ivy ?
Tomasz Nurkiewicz
55
No, pero he gastado toda mi paciencia para cambiar en este momento. Quizás la próxima vez. Quiero volver a la codificación. ¿Se puede hacer con maven?
chubbsondubs

Respuestas:

260

El complemento de dependencia de Maven puede resolver su problema.

Si tiene un pomcon todas sus dependencias de proyecto especificadas, todo lo que necesitaría hacer es ejecutar

mvn dependency:copy-dependencies

y encontrará la target/dependenciescarpeta llena de todas las dependencias, incluida la transitiva.

Agregando la respuesta de Gustavo a continuación : Para descargar las fuentes de dependencia , puede usar

mvn dependency:copy-dependencies -Dclassifier=sources

(a través de Apache Maven Dependency Plugin doc ).

Raghuram
fuente
1
Gracias @ Raghuram, he estado buscando esto por años.
eskalera el
pero ¿qué pasa si quiero copiar todas las dependencias a mi repositorio local? ¿Para esto se supone que debe usarse? ¿Por qué copiar si tal vez ya esté en el repositorio local? Es local de todos modos.
ses
1
@ses Una compilación estándar de Maven (por ejemplo, compilar, probar, empaquetar, instalar, etc .; no estoy seguro de validar) ya copia todas las dependencias en su repositorio local de forma predeterminada. Esto no es para eso. En cambio, es para situaciones en las que necesita las dependencias de su aplicación por cualquier motivo. Lo estoy usando en este momento para inspeccionar las bibliotecas dependientes en busca de definiciones redundantes de API (por ejemplo, algunas bibliotecas incluirán API de Javax, que pueden entrar en conflicto con otras versiones de la misma API), pero también es bueno si su aplicación necesita sus dependencias incluidas. para distribución, o simplemente lo que sea.
Spanky Quigman
1
+1 para una respuesta clara, concisa y útil. Acabo de pasar por el mismo baile Maven que el OP y solo quería recuperar las dependencias del archivo JAR. ¡Gracias! Ojalá pudiera +10
Brandon
@Raghuram Técnicamente terminas con todos los artefactos (resueltos) en "objetivo / dependencias". Además, existe el problema potencial de las colisiones de nombres ya que se ignora la coordenada "groupId" de una dependencia. En otras palabras, "dependencia: dependencias de copia" no conserva la estructura de diseño.
whaefelinger
8

Basado en la respuesta de @Raghuram , encuentro un tutorial sobre cómo copiar dependencias de proyectos , solo:

  1. Abra su pom.xmlarchivo de proyecto y encuentre esto:

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
  2. Que reemplazar el <plugins> ... </plugins>con:

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  3. Y llame a Maven dentro de la línea de comando mvn dependency:copy-dependencies

Después de que termine, creará la carpeta target/dependencydentro de todas las jardependencias del directorio actual donde pom.xmlvive.

usuario
fuente
¿Dónde escribo el comando "mvn"? Haga clic derecho en maven-project-> Maven -> .. ??
Inhalf horneado
En una línea de comando de terminal en la carpeta donde está el pom.xmlarchivo.
usuario
1
No funciono Creo que Maven se instala solo como complemento. Tuve que descargar manualmente Maven también. Entonces mvn dependency:copy-dependenciesfuncionó!
Al horno Inhalf
8

Finalmente descubrí cómo usar Maven. Desde Eclipse, cree un nuevo proyecto Maven.

Descarga Maven, extrae el archivo, agrega la /bincarpeta a la ruta.

Valide la instalación desde la línea de comandos ejecutando mvn -v(imprimirá la versión y la ruta de instalación de Java)

Cambie a la carpeta raíz del proyecto (donde pom.xmlse encuentra) y ejecute:

mvn dependency:copy-dependencies

Todos los archivos jar se descargan en /target/dependency.

Para configurar otro directorio de salida:

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

Ahora es posible reutilizar este proyecto Maven para todas las descargas de dependencias alterando el pom.xml

Agregue jar al proyecto java por la ruta de compilación -> configure la ruta de compilación -> bibliotecas -> agregue JAR ..

Inhailed al horno
fuente
1
No necesariamente tiene que ser un proyecto de eclipse. Abrí un archivo jar en Java Decompiler y copié pom.xml en una carpeta vacía. Llamé mvn dependency:copy-dependenciescomo lo describiste desde esa carpeta y obtuve todos los archivos jar dependientes bien copiados en una sola carpeta.
Bernhard Döbler
4

Encontré el siguiente comando

mvn dependency:copy-dependencies -Dclassifier=sources

aquí maven.apache.org

Gustavo
fuente
2

Compruebe si tiene algunos archivos de configuración en el ${MAVEN_HOME}/confdirectorio como settings.xml. Esos archivos anulan la configuración de la .m2carpeta y, debido a eso, la carpeta del repositorio .m2puede no ser visible o descartada.

MagGGG
fuente