java - jars - maven add project jar
Maven: ¿la mejor manera de vincular el JAR externo personalizado a mi proyecto? (14)
Cambie su SystemPath .
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${project.basedir}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
Es mi primer par de días aprendiendo Maven y todavía estoy luchando con lo básico. Tengo un archivo .jar externo (no disponible en los repositorios públicos) al que necesito hacer referencia en mi proyecto y estoy tratando de descubrir cuál es mi mejor opción.
Es un proyecto de pequeña escala sin un repositorio central para bibliotecas, por lo que tiene que ser un repositorio local (de alguna manera agregado al control de fuente, ¿no sabe si se supone que debe funcionar de esa manera?) O el .jar necesita almacenarse en disco fuera de cualquier repositorio formal.
1) ¿Cuál es mi mejor opción para agregar el archivo .jar a las referencias de mi proyecto con Maven dado que deseo que tanto el proyecto como la biblioteca estén en control de fuente?
2) Todavía no puedo hacer que Eclipse vea la dependencia. Lo agregué manualmente a la sección del pom, y se muestra bien en la lista Dependencias en m2eclipse. mvn compile y mvn package tienen éxito, pero ejecutar los resultados del programa en:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type
Esto es después de editar el POM como:
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
¿Debo ejecutar mvn install: install-file aunque ya haya editado el pom.xml como se indica arriba?
¡Gracias!
Con Eclipse Oxygen puedes hacer lo siguiente:
- Coloque sus bibliotecas en WEB-INF / lib
- Proyecto -> Configurar ruta de compilación -> Agregar biblioteca -> Biblioteca de aplicaciones web
Maven los llevará al instalar el proyecto.
Creo que deberías usar mvn install:install-file
para rellenar tu repositorio local con los mvn install:install-file
la biblioteca, entonces debes cambiar el alcance del sistema para compilarlo.
Si está comenzando con maven, le sugiero que use maven directamente, no los complementos IDE, ya que agrega una capa adicional de complejidad.
En cuanto al error, ¿pones los jar requeridos en tu classpath? Si usa tipos de la biblioteca, también debe tener acceso al mismo en tiempo de ejecución. Esto no tiene nada que ver con maven mismo.
No entiendo por qué quieres poner la biblioteca a control de fuente: es para código de fuente, no para archivos binarios.
El manual de Maven mkyong.com/maven/… esto:
mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar
El pom.xml buscará en su repositorio local para tratar de encontrar la dependencia que coincida con su artefacto. Además, en realidad no deberías estar usando el alcance del sistema o los atributos de SystemPath, estos normalmente están reservados para cosas que están en el JDK y no en el JRE.
Consulte esta question sobre cómo instalar artefactos de maven.
Esto se puede lograr fácilmente utilizando el elemento <scope> anidado dentro del elemento <dependency>.
Por ejemplo:
<dependencies>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}/src/lib/ldapjdk.jar</systemPath>
</dependency>
</dependencies>
Referencia: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
La mejor solución aquí es instalar un repositorio: Nexus o Artifactory. Si te da un lugar para poner cosas como esta, y además acelera las cosas almacenando tus cosas desde el exterior.
Si la cosa con la que estás tratando es de código abierto, también podrías considerar ingresar en el centro.
Ver la guía
No use SystemPath. Contrariamente a lo que la gente ha dicho aquí, puedes poner un contenedor externo en una carpeta debajo del directorio de proyecto de tu check-out y que Maven lo encuentre como otras dependencias. Aquí hay dos pasos cruciales:
- Use "mvn install: install-file" con -DlocalRepositoryPath.
- Configure un repositorio para que apunte a esa ruta en su POM.
Es bastante sencillo y puede encontrar un ejemplo paso a paso aquí: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html
Puede crear un Repositorio de In Project, para que no tenga que run mvn install:install-file
cada vez que trabaje en una nueva computadora
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${project.basedir}/libs</url>
</repository>
<dependency>
<groupId>dropbox</groupId>
<artifactId>dropbox-sdk</artifactId>
<version>1.3.1</version>
</dependency>
/groupId/artifactId/version/artifactId-verion.jar
detalle leer esta publicación en el blog
http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/
Si el jar externo es creado por un proyecto de Maven solo entonces puedes copiar el proyecto completo en tu sistema y ejecutar un
mvn install
en el directorio del proyecto. Esto agregará el jar al directorio .m2 que es el repositorio maven local.
Ahora puedes agregar el
<dependency>
<groupId>copy-from-the=maven-pom-of-existing-project</groupId>
<artifactId>copy-from-the=maven-pom-of-existing-project</artifactId>
<version>copy-from-the=maven-pom-of-existing-project</version>
</dependency>
Esto asegurará que
mvn exec:java
trabajos. Si usas http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
<scope>system</scope>
Luego, deberá agregar clases individualmente mientras usa la ejecución a través de la línea de comando.
Puede agregar los archivos jar externos mediante el siguiente comando que se describe aquí
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> /
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
Si encuentra el mismo problema y está utilizando spring-boot v1.4 + , puede hacerlo de esta manera.
Hay un includeSystemScope que puede usar para agregar dependencias de alcance de sistema al jar.
p.ej
Estoy usando el controlador de Oracle en mi proyecto.
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar</systemPath>
</dependency>
luego haga includeSystemScope = true para incluir el jar en la ruta / BOOT-INF / lib / **
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
y excluir del recurso para evitar la inclusión duplicada, el contenedor es lo suficientemente gordo ~
<build>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.jar</exclude>
</excludes>
</resource>
</resources>
</build>
¡Buena suerte!
Tenga en cuenta que todos los ejemplos que usan
<repository>...</respository>
requiere exterior
<repositories>...</repositories>
etiquetas adjuntas. No está claro a partir de algunos de los ejemplos.
Maven forma de agregar jarras no maven al proyecto maven
Proyecto Maven y jarras no maven
Agregue los plugins de instalación maven en su sección de construcción
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>${version.maven-install-plugin}</version>
<executions>
<execution>
<id>install-external-non-maven1-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
<file>${project.basedir}/libs/non-maven1.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven2-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
<file>${project.basedir}/libs/non-maven2.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven3-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
<file>${project.basedir}/libs/non-maven3.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
Agrega la dependencia
<dependencies>
<dependency>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
</dependency>
<dependency>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
</dependency>
<dependency>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
</dependency>
</dependencies>
Nota de References Soy el dueño del blog
actualización Desde entonces, hemos instalado nuestro propio servidor Nexus, mucho más fácil y limpio.
En nuestra empresa teníamos algunos frascos que teníamos algunos frascos comunes pero que no estaban alojados en ningún repositorio de maven, ni queríamos tenerlos en el almacenamiento local. Creamos un repositorio de mvn (público) muy simple en Github (pero puedes alojarlo en cualquier servidor o localmente):
Tenga en cuenta que esto solo es ideal para administrar unos pocos archivos jar que rara vez cambian
Crear repositorio en GitHub:
https://github.com/<user_name>/mvn-repo/
Agregar repositorio en pom.xml
(Tenga en cuenta que el archivo de ruta completa será un poco diferente del nombre del repositorio)<repository> <id>project-common</id> <name>Project Common</name> <url>https://github.com/<user_name>/mvn-repo/raw/master/</url> </repository>
Agregar dependencia al host (Github o servidor privado)
a. Todo lo que necesita saber es que los archivos se almacenan en el patrón mencionado por @glitch
/groupId/artifactId/version/artifactId-version.jar
segundo. En su host, cree las carpetas para que coincidan con este patrón.
es decir, si tiene un archivo jar llamadoservice-sdk-0.0.1.jar
, cree la carpetaservice-sdk/service-sdk/0.0.1/
y coloque el archivo jarservice-sdk-0.0.1.jar
en él.
do. Pruébelo tratando de descargar el contenedor desde un navegador (en nuestro caso:https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
Agregue dependencia a su archivo pom.xml:
<dependency> <groupId>service-sdk</groupId> <artifactId>service-sdk</artifactId> <version>0.0.1</version> </dependency>
Disfrutar