Pregunta ¿Cómo agregar archivos jar locales a un proyecto Maven?


¿Cómo agrego archivos jar locales (que todavía no forman parte del repositorio de Maven) directamente en las fuentes de la biblioteca de mi proyecto?


792
2018-02-10 10:03


origen


Respuestas:


Instale el JAR en su repositorio local de Maven de la siguiente manera:

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

Donde cada uno se refiere a:

  <ruta de acceso a archivo>: la ruta al archivo para cargar, por ejemplo, -> c: \ kaptcha-2.3.jar

<id-grupo>: el grupo en el que se debe registrar el archivo en, por ejemplo, -> com.google.code

<id-artefacto>: el nombre del artefacto para el archivo, por ejemplo, -> kaptcha

<versión>: la versión del archivo, por ejemplo, -> 2.3

<packaging>: el paquete del archivo, p. -> jar

Referencia


429
2018-02-10 10:08



Puede agregar dependencias locales directamente (como se menciona en Construir un proyecto maven con bibliotecas de propiedad incluidas) Me gusta esto:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>

1010
2018-03-10 13:02



En primer lugar, me gustaría dar crédito por esta respuesta al usuario anónimo de stackoverflow, estoy bastante seguro de haber visto una respuesta similar antes, pero ahora no puedo encontrarla.

La mejor opción para tener archivos jar locales como una dependencia es crear un repositorio maven local. Tal repositorio no es más que una estructura de directorios adecuada con archivos pom.

En mi ejemplo: Tengo un proyecto maestro en ${master_project} ubicación y subroyecto1 está en ${master_project}/${subproject1}

entonces estoy creando un repositorio mvn en: ${master_project}/local-maven-repo

En el archivo pom en el subproyecto1 ubicado ${master_project}/${subproject1}/pom.xml debe especificarse el repositorio, que tomaría la ruta del archivo como un parámetro url:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

La dependencia se puede especificar como cualquier otro repositorio. Esto hace que tu repositorio pom sea independiente. Por ejemplo, una vez que el contenedor deseado esté disponible en maven central, solo tiene que eliminarlo de su repositorio local y se extraerá del repositorio predeterminado.

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

Lo último pero no lo menos importante es agregar el archivo jar al repositorio local utilizando el modificador -DlocalRepositoryPath como aquí:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

El archivo jar de Onece está instalado, por lo que mvn repo se puede asignar al repositorio de código y la configuración completa es independiente del sistema. (ejemplo de trabajo en github)

Estoy de acuerdo en que tener JAR comprometidos con el repositorio de código fuente no es una buena práctica, pero en la vida real la solución rápida y sucia a veces es mejor que el repo completo de nexus para alojar un contenedor que no se puede publicar.


82
2018-02-27 10:17



Crea una nueva carpeta, digamos local-maven-repo en la raíz de tu proyecto Maven.

Solo agregue un repositorio local dentro de su <project> de tu pom.xml:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
    </repository>
</repositories>

Luego, para cada jar externo que quiera instalar, vaya a la raíz de su proyecto y ejecute:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]

75
2018-04-13 14:55



<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

24
2018-01-09 08:48



Me gustaría esa solución: use maven-install-plugin en el archivo pom:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                    <configuration>
                        <file>lib/yourJar.jar</file>
                        <groupId>com.somegroup.id</groupId>
                        <artifactId>artefact-id</artifactId>
                        <version>x.y.z</version>
                        <packaging>jar</packaging>
                    </configuration>
                </execution>
            </executions>
        </plugin>

En este caso puedes realizar mvn initialize y jar se instalará en el repositorio maven local. Ahora este jar está disponible durante cualquier paso de maven en esta máquina (no olvide incluir esta dependencia como cualquier otra dependencia maven en pom con <dependency></dependency> etiqueta). También es posible vincular la instalación de jar no a initialize paso, pero cualquier otro paso que desee.


20
2017-07-12 21:58



Sí, puedes tener pero no es buena idea.

En su lugar, instale todos estos frascos para maven repos

Ver también


14
2018-02-10 10:06



Una forma es subirlo a su propio administrador de repositorios Maven (como Nexus). Es una buena práctica tener un administrador de repositorio propio de todos modos.

Otra buena forma que he visto recientemente es incluir el complemento de instalación de Maven en su ciclo de vida de compilación: declara en el POM que debe instalar los archivos en el repositorio local. Es una pequeña pero pequeña sobrecarga y no implica ningún paso manual.

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


9
2018-02-10 10:39



Agregue su propio JAR local en el archivo POM y úselo en maven build.

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

Por ejemplo:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

Luego agrégalo al POM así:

enter image description here


8
2017-07-05 06:22