java - que - construir un proyecto maven con bibliotecas de propiedad incluidas
maven tutorial español pdf (11)
¿Por qué no ejecutar algo como Nexus , su propio repositorio maven que puede cargar archivos jar propietarios de terceros, y también proxy otros repositorios públicos, para ahorrar en ancho de banda?
This también tiene algunas buenas razones para ejecutar su propio administrador de repositorio maven.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo agregar archivos jar locales a un proyecto Maven? 24 respuestas
Cómo crear maven pom, que hará que el proyecto sea edificable, ¿puedo incluir jarrones propios con mi proyecto directamente sin tener que sacarlos del repositorio? Alguien hizo esto antes?
EDITAR:
No quiero que se pueda ejecutar construyendo assembly con dependencias jar, quiero que se pueda compilar. Entonces, cualquiera que tenga este proyecto puede construirlo, incluso si los frascos no se encuentran en ningún repositorio.
Crea una carpeta de repositorio bajo tu proyecto. Echemos
${project.basedir}/src/main/resources/repo
Luego, instale su jar personalizado en este repositorio:
mvn install:install-file -Dfile=[FILE_PATH] /
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] /
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
Por último, agregue las siguientes definiciones de repositorio y dependencia a los proyectos pom.xml:
<repositories>
<repository>
<id>project-repo</id>
<url>file://${project.basedir}/src/main/resources/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>[GROUP]</groupId>
<artifactId>[ARTIFACT]</artifactId>
<version>[VERS]</version>
</dependency>
</dependencies>
Cree una nueva carpeta, digamos local-maven-repo
en la raíz de su proyecto Maven.
Solo agregue un repositorio local en su <project>
de su 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]
(Copiado de mi respuesta en una pregunta similar )
Creo que la solución "correcta" aquí es agregar sus bibliotecas propietarias a su propio repositorio. Debería ser simple: cree pom para su proyecto de biblioteca y publique la versión compilada en su repositorio. Agregue este repositorio a la lista de repositorios para su proyecto de correo y ejecute build. Creo que funcionará para ti.
La manera realmente rápida y sucia es apuntar a un archivo local:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:/DEV/myfunnylib/yourJar.jar</systemPath>
</dependency>
Sin embargo, esto solo vivirá en tu máquina (obviamente), para compartirlo normalmente tiene sentido usar un archivo m2 adecuado (nexus / artifactory) o si no tienes ninguno de estos o no quieres configurar uno maven local archivo estructurado y configure un "repositorio" en su pom: local:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://C:/DEV//mymvnrepo</url>
</repository>
</repositories>
remoto:
<repositories>
<repository>
<id>my-remote-repo</id>
<url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
</repository>
</repositories>
Posibles soluciones es poner sus dependencias en src / main / resources luego en su pom:
<dependency>
groupId ...
artifactId ...
version ...
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
Nota: las dependencias del sistema no se copian en jar / guerra resultante
(ver Cómo incluir dependencias del sistema en war build usando maven )
Puede obtenerlo de su controlador local de la siguiente manera:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
Puede usar maven-assembly-plugin y crear un jar con todas las dependencias incluidas.
Puedes agregar el jar a tu proyecto y jugar con el maven-assembly-plugin, o agregar el jar al repositorio local:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true
Where: <path-to-file> the path to the file to load
<group-id> the group that the file should be registered under
<artifact-id> the artifact name for the file
<version> the version of the file
<packaging> the packaging of the file e.g. jar
Una buena forma de lograr esto es tener un servidor espejo Maven como Sonatype Nexus . Es gratis y muy fácil de configurar (aplicación web Java). Con Nexus, uno puede tener un repositorio privado (de equipo, corporativo, etc.) con la capacidad de implementar aplicaciones internas y de terceros, y también registrar otros repositorios Maven como parte del mismo servidor. De esta forma, las configuraciones locales de Maven solo harían referencia al único servidor Nexus privado y todas las dependencias se resolverán con él.
1 O puede incluir ese jar en su classpath de aplicación
2 puede instalar un archivo jar particular en su maven reopos por
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> /
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>