2012-09-25 10 views
13

Uso Apache Maven para administrar mis libs de Java (jar) y algunos proyectos que usan libs. Para mayor conveniencia, uso mvn eclipse:eclipse para generar archivos de proyecto Eclipse que se pueden importar al espacio de trabajo de Eclipse para su edición.¿Cómo decirle a Maven que incluya la dependencia jar, no el directorio fuente del subproyecto en Eclipse?

Surgen problemas cuando edito el proyecto principal y los proyectos de Java lib en el mismo espacio de trabajo de Eclipse. Es decir, mvn eclipse:eclipse incluye ruta src dependencia en el archivo .classpath, no la dependencia jar como se esperaba.

Supongo que tengo un proyecto de lib de Jave llamado mylib. El archivo jar correspondiente mylib.jar se ha implementado en un repositorio privado de Maven mantenido por mí. Para utilizar mylib.jar en el proyecto principal, se incluye la siguiente dependencia en pom.xml.

<!-- pom.xml for the main project --> 
<dependency> 
    <groupId>namespace.my</groupId> 
    <artifactId>mylib</artifactId> 
    <version>[1.0,)</version> 
</dependency> 

mvn compile y mvn test obra completa, en la que mylib.jar se descarga automáticamente de mi repo. Sin embargo, al intentar mvn eclipse:eclipse, encuentro que el archivo generado .classpath no incluye la dependencia mylib.jar como se esperaba. En cambio, incluye el directorio de archivos fuente para mylib de la siguiente manera.

<!-- .classpath file generated by mvn eclipse:eclipse --> 
<classpathentry kind="src" path="/mylib"/> 

Parece que Maven lee los metadatos del Eclipse y encuentra mibiblioteca y los principales coexits del proyecto en el mismo espacio de trabajo. Por lo tanto, maven incluye la fuente de mi bien. Maldita sea. ¿Cómo puedo decirle a maven que ignore el origen del proyecto local y solo incluya el archivo jar?

+0

¿Por qué no ¿Usas el plugin m2e Eclipse? –

+1

Porque me siento cómodo escribiendo comandos en la consola: la compilación, la prueba y el empaquetado se realizan en un solo comando. Además, los segmentos de configuración útiles en pom.xml pueden reutilizarse fácilmente en otros proyectos. Eclipse es bueno, pero demasiados menús y numerosos complementos me resultan complicados. –

+0

Los dos no son necesariamente mutuamente excluyentes, aunque tendrías que renunciar al plugin de Maven Eclipse para usar m2e. Encuentro Eclipse conveniente para la depuración y m2e garantiza que el proceso de construcción es lo más similar posible dentro y fuera de Eclipse. –

Respuesta

12

Creo que esto es porque son proyectos relacionados en Eclipse. Entonces, si hace clic con el botón derecho en su proyecto principal y va al Project References, debe marcarse su proyecto lib.

Si ejecuta mvn eclipse:eclipse, automáticamente agregará referencias de proyectos para cualquier subproyecto (módulos). Puede cambiar esto con la propiedad useProjectReferences del plugin maven eclipse.

Su valor predeterminado es true, pero

Cuando se establece en falso, el plugin no crear sub-proyectos y en su lugar referencia los sub-proyectos utilizando el paquete instalado en el repositorio local

Para utilizar la propiedad, configure la propiedad en su pom.xml

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.9</version> 
      <configuration> 
       <useProjectReferences>false</useProjectReferences> 
      </configuration> 
     </plugin> 
    <plugins> 
<build> 

o como una propiedad en la línea de comandos:

mvn eclipse:eclipse -Declipse.useProjectReferences=false 
0

Eclipse necesita saber la ruta al repositorio local de maven. Por lo tanto, se debe establecer la variable classpath M2_REPO. Ejecute el siguiente comando:

mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo 

También puede definir una nueva variable de ruta de clases dentro de Eclipse: En la barra de menú, seleccione Window > Preferences. Select the Java > Build Path > Classpath Variables page.

luego construir el proyecto mediante la ejecución de mvn eclipse:eclipse

Espero que ayude!

0

Gracias por consejos de Hound Dog. Sí, useProjectReferences controla cómo manejar los subproyectos, incluido el directorio origen o los archivos jar.

No he instalado el complemento maven para Eclipse, por lo que agrego la siguiente configuración en pom.xml. Le dice a Maven que incluya la dependencia de jar en el repositorio local de maven, no en el directorio de origen. Si el archivo jar requerido no está presente en el repositorio local, se descargará automáticamente sobre la marcha.

<!-- pom.xml for the main project: include jar, not src path --> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-eclipse-plugin</artifactId> 
    <version>2.9</version> 
    <configuration> 
      <useProjectReferences>false</useProjectReferences> 
    </configuration> 
    </plugin> 

Ahora mvn eclipse:eclipse funciona como esperaba.

+0

He actualizado mi respuesta para reflejar esto, así como la alternativa de línea de comando. Si está contento con eso, no olvide seleccionarlo como la respuesta correcta :) –

0

Sólo trate de usar el elemento de tipo dentro de la dependencia etiqueta y mencionar la fuente/frasco como el tipo en su pom.xml

<!-- pom.xml for the main project --> 
<dependency> 
    <groupId>namespace.my</groupId> 
    <artifactId>mylib</artifactId> 
    <version>[1.0,)</version> 
    <type>jar<type> <!-- source/jar --> 
</dependency> 
+1

No está funcionando. – Marcin

0

Recientemente he experimentado que este comportamiento es provocado por la versión indicada en los archivos pom.xml Si la versión de la lib de la que depende su proyecto principal está disponible para eclipsar en el espacio de trabajo (por ejemplo, un proyecto con el correspondiente pom.xml [group, artifact, version] para lib) esto se usará como referencia de proyecto en lugar de ser sacado de la ubicación de M2REPO.

Mi solución fue cambiar la versión de la biblioteca pom.xml en el espacio de trabajo a otra versión, lo que me permite mejorar la lib, mientras que el proyecto principal aún extrajo la lib anterior de M2REPO.

Usar esto alineando los números de versión le permite realizar mejoras/alteraciones de artefactos concurrentes con poca molestia.

Todavía no he probado si necesita ejecutar mvn eclipse:eclipse cada vez que cambia los archivos lib pom.xml y las dependencias primarias pom.xml, pero yo esperaría que fuera así.

9

Necesito evitar incluir la dependencia como un proyecto refrendado, pero como un contenedor. Usando Eclipse 4.6 Neon ninguna de las soluciones anteriores funciona.

tuve desactivar la función Workspace Resolution

click on the project -> Maven -> Disable Workspace Resolution 
+0

Gracias! ¡Salvó mi día! –

+0

¡Gracias! Funcionó para mí –

0

he intentado cerrar el proyecto en Eclipse & el espacio de trabajo acaba de construir en sí, esta vez tomando el frasco del repositorio en lugar de vincular el proyecto

Cuestiones relacionadas