Orden de librerías en archivo .classpath de un proyecto Maven 2

313 views
Skip to first unread message

Diego T

unread,
May 30, 2012, 7:01:07 PM5/30/12
to jav...@googlegroups.com
Hola a todos, les escribo para ver si alguien me puede ayudar con el siguiente problema:

Tengo un proyecto en Eclipse que creo a partir de un archetype de Maven 2. En el proyecto necesito hacer un test para un Action de Struts 2.
A tal fin agrego a mi pom la siguiente dependencia:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-testng-plugin</artifactId>
    <version>2.3.4</version>
</dependency>

Ahora bien, este jar me provee la clase StrutsTestCase que es la clase de la cual tengo que hacer extender mi clase de prueba. Así que creo mi clase Test, la hago extender de StrutsTestCase e importo la librería y todo compila correctamente.
El problema que tengo es que luego de importar esta clase, espero poder hacer uso de ciertos métodos y propiedades que esta clase provee, pero me encuentro con que los mismos no existen.
Analizando un poco porque pasaba esto me di cuenta de que el problema es que el archetype que uso para construir mi proyecto agrega ya a las referenced libraries un jar que contiene la clase StrutsTestCase, pero la versión de la clase en ese jar es más vieja que la que yo importo por medio del artefacto que agrego al pom y por eso no tiene los atributos y/o métodos que espero. Y como el jar que agrega el archetype está listado en el .classpath antes que el jar que yo agrego en el pom, no tengo forma de hacer que el import levante mi clase y no la del jar que viene con el archetype.
A modo de prueba edite a mano el .classpath de mi proyecto y listé mi jar antes que el jar que trae el archetype y así pude importar la clase correcta. Sin embargo, esta solución no es aceptable ya que cuando corro mvn eclipse:eclipse el .classpath se regenera y el listado me vuelve a quedar mal (o al menos de un modo que a mi no me sirve).
En conclusión mi pregunta es:
Existe alguna forma de indicarle a Maven (o al goal eclipse) que mi dependencia debe listarse antes? Intenté responder la pregunta usando Google pero no he tenido suerte todavía.


Muchas gracias desde ya a quien pueda darme cualquier tipo de ayuda.
Diego.

pablo.a....@gmail.com

unread,
May 30, 2012, 9:20:33 PM5/30/12
to jav...@googlegroups.com
Si tenes dos versiones de la misma libreria con que dejes la mas nueva en el pom  deberia alcanzar. El plugin de eclipse genera el classpath en base a las dependencias del pom, con que dejes una deberia andar todo bien.

Saludos.

2012/5/30 Diego T <dieg...@gmail.com>

Diego.

--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Diego T

unread,
May 30, 2012, 9:50:16 PM5/30/12
to jav...@googlegroups.com
Hola Pablo, muchas gracias por tu respuesta.

Te comento que en mi pom tengo sólo una dependencia (la que indiqué en mi mail anterior) y sin embargo en el .classpath tengo los dos jars, el que yo indico y el que viene con el archetype.

Entiendo lo que vos decis y estoy seguro de que debe ser como decis, sin embargo, calculo que me deja los dos jars porque los jars (no se por qué) no difieren sólo en el numero de version, sino que son artefactos diferentes (me disculpo por no haber dado esa información en mi mail anterior, la pasé por alto sin querer). Ahora no tengo el código conmigo y no puedo confirmar los nombres, pero por darte un ejemplo, si el artefacto que yo indico en el pom se llama struts2-test-plugin el que viene con el archetype se llama algo así como struts2-core y se ve que ambos jars tienen la misma clase. Si tengo que decir por qué se da esta situación la verdad no lo sé, lo que si sé es que ese otro jar incluye la misma clase que yo necesito con exactamente el mismo package pero la versión que me provee está desactualizada para mis fines y necesito de alguna forma indicar que la que se debe usar es la de la dependencia que indico yo.

Hay alguna otra solución?


Gracias,
Diego.

Nick Risaro

unread,
May 30, 2012, 11:44:21 PM5/30/12
to jav...@googlegroups.com
Dentro de la configuración de una dependencia podés indicar que "subdependencias" querés traer y cuales no, el tag, creo que, se llama exclusions, en ese caso vos indicarías que excluya la dependencia struts2-testng-plugin

Otra cosa, a la dependencia que usás para escribir los tests indicale que el scope es test (a menos que la uses fuera de los tests, para evitar otros conflictos.

Saludos

Diego T

unread,
May 31, 2012, 8:13:41 AM5/31/12
to jav...@googlegroups.com
Hola Nick, gracias por responder.

Entiendo lo que decis, pero el tema es que yo no quiero excluir la libreria struts2-test-plugin, yo lo que quisiera en todo caso sería excluir una librería que me descarga el archetype, lo cual no se si puede hacerse, pero que tampoco puedo hacer porque podría romper algo más. Así que hasta ahora creo que lo único que me sirviría sería poder cambiar el orden de las cosas en el .classpath.

Respecto a lo del scope, tenés 100% de razón. Hice copy paste del search engine del repositorio de Maven y me olvidé de agregarle el scope.


Saludos,
Diego.

Nick Risaro

unread,
May 31, 2012, 10:10:26 AM5/31/12
to jav...@googlegroups.com
Hola Diego,

Que el arquetipo descargue una dependencia no debería generar mayores conflictos a menos que esa dependencia quede en el pom. Lo que tendrías que hacer es buscar que dependencia de las que tenés en el pom está trayéndose la dependencia de test que te genera conflictos (para esto el plugin de eclipse de maven es ideal porque te genera el grafo de dependencias) y a esa dependencia configurarle que no descargue el testng plugin.

No creo que excluirla te genere ningún conflicto en runtime ya que es algo específico de los tests.

Saludos

2012/5/31 Diego T <dieg...@gmail.com>

Roberto Capone

unread,
May 31, 2012, 10:28:23 AM5/31/12
to jav...@googlegroups.com
Creo que el archetype está mirando en el super pom de tu maven. La dependencia a la librería duplicada debe estar ahí. Fijate si removiendola o referenciando a la version más nueva, funciona.

2012/5/31 Nick Risaro <nri...@gmail.com>



--
Roberto C. Capone

--

Diego T

unread,
Jun 1, 2012, 2:21:02 PM6/1/12
to jav...@googlegroups.com
Gracias a todos por las respuestas.
Todavía no pude solucionarlo pero ahora al menos tengo más ideas de por donde probar.


Saludos,
Diego.
Reply all
Reply to author
Forward
0 new messages