2009-12-18 14 views
8

Creo que la mayoría de ustedes sabrá, los programadores a menudo reutilizan el código de otro software. Creo que la mayoría de las veces es una buena idea. Pero si usa código de otro proyecto, su programa depende del otro proyecto.¿Cuál es la mejor manera de resolver dependencias entre proyectos de Java?

Mi caso actual Obtuve tres proyectos de Java A, B y C. Ahora A usa B y B usa C. Estoy usando eclipse IDE y agregué B a la ruta de acceso de A y C a la ruta de acceso de B. Ahora hay un error del compilador que A no puede resolver algo de C. Entonces tengo que agregar C al buildpath de B.

¿Cuál es la mejor manera de resolver las dependencias mientras mantiene su programa tan independiente como posible de otros proyectos?

Me gustaría saber es en general y en referencia a mi situación actual. ¿Hay mejores formas de hacer esto? Es decir. hay configuraciones de ruta de clases en la vista de configuración de inicio/depuración, pero creo que no ayudarán en el momento de la compilación.

Gracias de antemano.

+1

No sé por qué esto era por votó-y sin comentarios en eso. Es una pregunta válida, aunque algo a la izquierda de newbie-ish. Mala forma. –

Respuesta

7

Esto suena como parte del conjunto de problemas corregidos por Maven. Utilizando Maven y Eclipse, concretamente m2eclipse, puede hacer que los proyectos usen otros proyectos y toda la resolución de la dependencia se maneja por usted.

+1

Además, si usa IntelliJ IDEA, la integración incorporada de Maven es fantástica. – danben

+2

Usamos maven para un proyecto grande. Me encanta una vez que está configurado y funciona correctamente, sin embargo, la documentación es débil en muchos lugares y puede tener una curva de aprendizaje empinada. Tenga en cuenta estos problemas antes de embarcarse en ese camino. –

+0

Si desea obtener más información sobre Maven, hay un libro electrónico gratuito de sonatype aquí: http://www.sonatype.com/Support/Books – Kjellski

2

Me parece que está haciendo lo que debe hacer sin incorporar una herramienta de administración de dependencias como Ivy o Maven, que le proporcionan la capacidad de "administración de dependencia transitiva". Con cualquiera de estas herramientas puede simplemente especificar que A depende de B y B depende de C y ellos sabrán automáticamente que A también necesitará C.

Las ventajas de Maven (esto es en lo que tengo experiencia) también entran en juego cuando es el momento de empaquetar sus proyectos para su despliegue, ya que puede reunir fácilmente todas esas dependencias (en toda la jerarquía) y colocarlas juntos en una carpeta de distribución o un JAR gordo que contiene todas sus dependencias. Se necesita algo de tiempo de lectura y configuración para acceder a una herramienta como Maven, pero hace que la tarea de administrar sus dependencias sea mucho más fácil, especialmente a medida que crecen.

0

La gestión de dependencias es un tema enorme. Maven, Ivy y otras herramientas se han desarrollado para aliviar el dolor con cierto éxito. Ambas herramientas crean una jerarquía de dependencia para que no se encuentre con la situación que describió. También tienen complementos de Eclipse para que Eclipse reconozca esa jerarquía.

Para utilizar verdaderamente estos marcos, tendrá que cambiar su proceso de construcción actual. Maven probablemente requiera un compromiso mayor que Ivy, pero tampoco es trivial, y entender cómo configurarlo lleva tiempo. Dicho esto, es muy útil tener definidas y administradas sus dependencias con claridad.

1

Utilizamos Maven y es esencial para nuestros proyectos. Es un buen momento para que aprendas: las dependencias en más de 3 proyectos pueden atemorizar. Maven trata con versiones para que, si por alguna razón, tienes que depender de Foo.1.2.3, Maven se asegurará de que no obtengas la versión incorrecta.

Sin embargo, no es trivial. Si usa Netbeans, está construido mejor que Eclipse y puede ayudarlo a aprender. (También los proyectos son bastante intercambiables entre los dos sistemas).

Maven admite una gran cantidad de conceptos en su archivo POM (pom.xml), incluida la información de licencia, contribuyentes, argumentos, etc. por lo que se obtiene mucho más que la gestión de la dependencia. Y admite la modularización de proyectos.

No omita la curva de aprendizaje; necesita saber cómo funciona.Pero también encontrará preguntas anteriores de SO que ayudarán a

1

Otros han mencionado varias de las buenas herramientas, probablemente sean las más comunes. Ivy es otro que está más dirigido a la gestión de la dependencia. Yo personalmente uso gradle, que tiene algunas de las mejores de todas esas características debajo de una envoltura groovy familiar ... que aún está evolucionando y está mal documentada. ;)

Una cosa a tener en cuenta es cómo estas herramientas manejan las dependencias transitivas. En su ejemplo, C es una dependencia transitiva de A porque A depende de B, que depende de C. Algunas de estas herramientas de compilación manejarán este tipo de dependencia de manera diferente y pueden sorprenderlo cuando menos lo espere.

Por ejemplo, si A realmente se refiere al código de C, es decir, tiene una dependencia en tiempo de compilación de C, entonces su configuración A-> B-> C funcionará en algo así como Maven. En el otro extremo, Gradle también te hará declarar que A depende de C ... ya que lo hace. Las dependencias de tiempo de ejecución se resuelven completamente de cualquier manera.

La sorpresa se produce cuando hace meses que transitivo está incluyendo algo y parte del código se ha basado en aspectos de C y decide que ya no necesita una dependencia B. De repente, su código no se compilará hasta que descubra que necesita una dependencia A-> C especificada. En este ejemplo, es bastante trivial descubrirlo, pero a veces no lo es.

Y si hablar así te hace nadar un poco la cabeza y no planeas que tu proyecto se vuelva mucho más complicado ... entonces probablemente puedas quedarte con lo que estás haciendo por un tiempo. Como otros mencionaron, es la forma correcta de hacerlo sin una herramienta que lo ayude.

1

Utilice maven para administrar sus dependencias y luego use el complemento de dependencia para ver las dependencias.

puede ejecutar

dependencia mvn: analizar

o

dependencia mvn: Árbol -Dverbose = true

esto le ayudará mucho.

1

sin duda debe usar una herramienta de administración de dependencias como la gente ha notado ... de forma manual, archive B y C en B_C.jar. Pruebe que la dependencia de B de C se resuelve dentro del Jar.

A continuación, agregue B_C.jar en la ruta de clase ...

Cuestiones relacionadas