¿Cómo ejecuto una clase principal en Eclipse desde un proyecto Maven diferente?

Así que tengo dos proyectos, el proyecto A y el proyecto B. El proyecto A contiene una clase principal que quiero ejecutar. El Proyecto B contiene algunos recursos de ruta de clase que son necesarios y también tiene una referencia al Proyecto A. Si ejecuto la clase principal en el Proyecto A directamente, solo la ejecutará en el contexto de ese proyecto y no incluirá los recursos de ruta de clase ya que Estás en el Proyecto B.

Pero si trato de ejecutar el Proyecto B, no puedo seleccionar la clase principal (ya que no existe en ese proyecto) y si trato de hacer clic derecho en el proyecto -> Ejecutar como -> Aplicación Java, no lo hace. cree esa clase principal como una clase principal válida. (Aparece en el cuadro de diálogo similar para el Proyecto A.)

Este parece ser un problema común de Eclipse; Encontré esta pregunta relacionada pero esta persona no está usando Maven. Además, aceptaron una respuesta que hacía referencia al proyecto B del proyecto A, lo que rompe la encapsulación que estoy tratando de lograr aquí: El proyecto referenciado Eclipse 3,6 (Helios) tiene un método principal, no se puede acceder desde la configuración de ejecución cuando se apunta al proyecto de referencia

preguntado el 29 de junio de 12 a las 19:06

Realmente, si la clase principal en el proyecto A depende de los recursos en el proyecto B, parece que el proyecto A debería hacer referencia al proyecto B. Tengo una sensación rara cuando dices que no quieres eso. -

El Proyecto B hace referencia no solo al proyecto A, sino a una gran cantidad de otros proyectos. Si alguno de ellos (incluido, entre otros, el proyecto A) quisiera cambiar la implementación, debería poder hacerlo sin necesidad de modificar los otros proyectos. El Proyecto B es el único que necesitaría ser modificado. Es un diseño modular bastante estándar. -

3 Respuestas

Opciones en las que puedo pensar:

  1. Use la línea de comando para iniciar el método principal pasando el jar en el classpath.
  2. Haga que el proyecto A se refiera a la configuración del proyecto B en lugar de hacerlo al revés. [Me doy cuenta de que no quiere hacer esto, pero se siente obligado a enumerarlo para ser exhaustivo)
  3. Cree una clase en el proyecto B que tenga un método principal que delegue en el proyecto A.

Respondido el 29 de junio de 12 a las 21:06

Gracias, al final utilicé la opción (3) - aunque es molesto tengo que hacerlo de esta manera. Al menos puedo eliminar esta clase en producción mucho más fácilmente de lo que puedo cambiar las opciones de classpath en producción. - Adán Burley

Así que tengo esto trabajando en

Eclipse IDE para Java Developers Versión: Kepler Service Release 1 Build id: 20130919-0819

@Michael Piefel: si B depende de A, entonces A ya está en la ruta de clase de configuración de ejecución de B en la entrada de ruta de clase "Dependencias de Maven".

El problema parece ser que la interfaz de usuario no presenta la clase que se elegirá en su cuadro de diálogo de búsqueda.

Pero si solo ingresa el nombre de clase completo en el campo de texto "Clase principal" y lo ejecuta, seguirá funcionando. :D

respondido 18 mar '14, 17:03

Este comportamiento en Eclipse realmente me molesta. ¿Lo reportó como un error o vio a alguien más reportándolo? - Rafael chaves

No, ha pasado mucho tiempo, he estado usando intellij durante los últimos años, pero también parece estar degradando hasta un punto de inutilizabilidad :( - PiersyP

Realmente solo necesitas ajustar tu Ejecutar configuraciones respectivamente. En el ruta de clases pestaña para la configuración de ejecución que usa para ejecutar la clase desde el proyecto A, puede agregar el proyecto B como una dependencia. Ahora, mientras se ejecuta esa clase, se incluyen todos los recursos del proyecto B.

Respondido el 29 de junio de 12 a las 21:06

Gracias por el consejo, pero el objetivo de usar Maven es que no debes jugar con estas cosas tú mismo;) - Adán Burley

No sé ... no parece tener ningún sentido usar Maven. - rk2010

Gracias por enseñarme sobre Maven, @Kidburla, pero creo que lo sé. No está jugando, solo tiene que decirle a Eclipse que ejecute la clase (sin importar de qué proyecto provenga) con el classpath de B (que luego incluirá todas las dependencias de Maven de B, por supuesto). Es un manejo de configuración de ejecución bastante estándar. - miguel piefel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.