java - desde - Maven and eclipse: ¿una forma confiable de agregar archivos no Maven o externos a un proyecto?
maven repository (3)
1) puede usar la dependencia del alcance del sistema
<dependency>
<groupId>test</groupId>
<artifactId>x</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/x.jar</systemPath>
</dependency>
2) puedes copiar tu x.jar al repositorio maven local como
repository / test / x / 1.0 / x-1.0.jar
y agrega una dependencia como
<dependency>
<groupId>test</groupId>
<artifactId>x</artifactId>
<version>1.0</version>
</dependency>
Maven es genial. En general, me mantiene fuera del infierno de dependencia de jar especificando versiones de paquetes dependientes en la configuración de pom
, y los aplica de forma automática. También tiene una gran integración con Eclipse a través de m2e, por lo que las cosas funcionan a la perfección en un IDE.
Todo esto es excelente para las dependencias que Maven conoce globalmente. Sin embargo, a veces, hay bibliotecas que deben incluirse en un proyecto que no está disponible en los repositorios Maven. En este caso, generalmente los agrego a un directorio lib/
en mi proyecto. Siempre y cuando estén en la ruta de clases, las cosas se compilarán.
Sin embargo, el problema es lograr que se incluyan automáticamente al importar un proyecto. He tolerado este problema con correcciones a medias y hacks durante demasiado tiempo. Cada vez que alguien instala este proyecto, tengo que decirles que agreguen manualmente los archivos lib/
en lib/
a su ruta de compilación de Eclipse para que desaparezcan todos los errores. Algo como lo siguiente:
Estoy buscando una forma de automatizar este proceso de una manera que funcione tanto con el programa mvn
línea de comandos como con Eclipse: más énfasis en Eclipse, porque es bueno tener proyectos que solo compilan cuando los importas.
No quiero configurar un servidor de repositorio para esto, ni tengo ningún componente propietario propio que justifique la configuración local. Solo tengo algunos archivos jar donde los desarrolladores no usan Maven; y quiero compilar con ellos ... Debería ser capaz de incluirlos en la distribución de mi software, ¿verdad?
Realmente estoy buscando una forma razonable de implementar esto que también funcione en Eclipse sin problemas. Esta es una solución que he encontrado prometedora, pero definitivamente no parece ser una solución autorizada para este problema. La única otra cosa que se acerca es el maven-addjars-plugin , que funciona bien pero solo en la línea de comandos. Este complemento no está mal, y tiene una configuración bastante razonable:
<plugin>
<groupId>com.googlecode.addjars-maven-plugin</groupId>
<artifactId>addjars-maven-plugin</artifactId>
<version>1.0.5</version>
<executions>
<execution>
<goals>
<goal>add-jars</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${project.basedir}/lib/java-aws-mturk</directory>
</resource>
<resource>
<directory>${project.basedir}/lib/not-in-maven</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Sin embargo, intentar que se ejecute en Eclipse implica agregar el siguiente enredo sobre el mapeo del ciclo de vida a su pom.xml
, que nunca he tenido que trabajar; Ni siquiera creo que esté configurado para realmente agregar algo a la ruta de compilación de Eclipse.
<pluginManagement>
<plugins>
<!--This plugin''s configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
com.googlecode.addjars-maven-plugin
</groupId>
<artifactId>
addjars-maven-plugin
</artifactId>
<versionRange>
[1.0.5,)
</versionRange>
<goals>
<goal>add-jars</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
Me parece que podría usar el Complemento de recursos de Maven para hacer esto por usted. Simplemente enlace la copia de recursos a una fase del ciclo de vida apropiado (una fase anterior a la compilación). Lo más probable es que necesite modificar el compilador maven-compiler para que estas bibliotecas estén en el classpath al compilar y en tiempo de ejecución.
Puede usar maven para instalar archivos de una carpeta project / lib en el repositorio local con el maven-install-plugin como se muestra a continuación. He hecho esto antes con los controladores JDBC. Puede que tenga que crear un pom separado para él y ejecutarlo con mvn -f installdeps.pom o algo así.
Si puedes hacer que funcione bien y enlazar con un ciclo de vida como validar o algo así, entonces puedes usar el plugin m2e con Eclipse y puede jugar buenas y leer dependencias directamente desde el pom.xml e instalar las jarras según sea necesario para el Repo local
<plugin>
<!-- We dont want children attempting to install these jars to the repo. -->
<inherited>false</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>Microsoft JDBC Driver File 1</id>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/sqljdbc4.jar</file>
<groupId>com.microsoft</groupId>
<artifactId>microsoft-jdbc-driver</artifactId>
<version>4.0</version>
<packaging>jar</packaging>
</configuration>
</execution>
<execution>
<id>ojdbc5</id>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/ojdbc5.jar</file>
<groupId>com.oracle</groupId>
<artifactId>ojdbc5</artifactId>
<version>11.1.2</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>