2010-09-10 11 views
8

Esto es de alguna manera un seguimiento de una pregunta mía previamente no respondida (link) que se excacionó en las últimas semanas, y ahora ha llegado a un punto donde realmente no puedo desarrollar más ...La manera correcta de tratar con librerías externas en java (usando eclipse)

Así que aquí está el trato; Tengo más experiencia en matemáticas/ingeniería que CS pura, así que no tengo mucha experiencia con el desarrollo de software adecuado/a gran escala, sino con secuencias de comandos y algoritmos. Ahora que estoy trabajando en un proyecto grande, por mi cuenta, estoy confundido con algunos aspectos del desarrollo. Uno de ellos es el manejo de las bibliotecas/dependencias

que han creado inicialmente una carpeta llamada lib bajo mi carpeta del proyecto (en Eclipse espacio de trabajo) y copiado mis bibliotecas externas allí y luego añade a la trayectoria de la estructura. Sin embargo, más adelante necesité algunas otras cosas como JCommons, JFreeChart, Apache Commons Math etc. De acuerdo con las instrucciones, estas bibliotecas pueden/deben incluirse como bibliotecas de usuario, permitiendo al desarrollador ver la documentación y el código fuente desde IDE (como Eclipse). He acertado hasta ahora, espero ...

Entonces, ¿dónde está el problema? Bueno, en primer lugar, apareció como las bibliotecas de usuario mencionadas anteriormente no están incluidas en la copia SVN del proyecto, lo que significa que mis colegas que querían probar mi proyecto no pudieron hacerlo, simplemente adquiriendo el proyecto desde SVN. Ahora que la segunda fase del problema no salió a la superficie cuando cambié mi estación de trabajo en el trabajo, quería importar mi proyecto a Eclipse desde mi copia de seguridad, pero luego todo, excepto esas bibliotecas de usuario, están ahí. Para hacer las cosas más complicadas, cuando se finaliza este software, se implementará en un servidor, por lo que sería absolutamente mejor si todo se pudiera empaquetar en una única biblioteca o en un archivo incluso mejor ejecutable jar.

Me han aconsejado anteriormente que eche un vistazo a Maven, o Ivy, pero mi comprensión inicial después de comprobarlos es que se usan desde el principio y sobre todo para proyectos más complicados. Honestamente, estoy completamente desconcertado sobre cómo se supone que debo administrar mis dependencias. ¿Algunas ideas?

(Lo siento por mantenerla mucho tiempo, pero pensé que mejor completa y largo información inadecuada a continuación)

EDIT: he logrado solucionar el problema; aparentemente el problema se originó por el simple hecho de que Eclipse no copia todos los recursos en un solo lugar, y las instrucciones de instalación para algunas bibliotecas en realidad no le advierten sobre cómo administrar las bibliotecas de la mejor manera.

Gracias a todos, que se tomaron su tiempo para intentar ayudarme. Con el tiempo, miraré más en proyectos como Maven e Ivy, definitivamente es algo interesante. Sin embargo, por ahora solo tengo que volver al software en estado de ejecución, he estado luchando con cosas nuevas durante demasiado tiempo ... :)

Respuesta

10

A riesgo de cometer un acto de herejía, diría que Maven y wot, no son excesivos aquí. Necesitas tus dependencias en tu proyecto SVN, así de simple. Ha agregado su carpeta lib a su ruta de compilación en Eclipse, y eso está bien. Pero a menos que agregue específicamente el contenido de la carpeta lib a su proyecto (como lo describe Fred), esos elementos no serán aptos para comprometerse con SVN, sino que simplemente se hará referencia a ellos en el classpath de su configuración. Eso es bueno para ti, no es bueno para cualquiera que quiera echar un vistazo a tu proyecto (como lo has encontrado).

aprecio que podríamos tener interminables discusiones sobre las mejores prácticas, la validez de la comisión de bibliotecas de terceros para el control de versiones, y así sucesivamente y así sucesivamente ... pero creo que la mayoría de la gente tiene trabajo que hacer ;-)

+0

, en resumen, rehacer (como volver a vincular) las bibliotecas de problemas y asegurarme de que estén sincronizadas con el representante de svn, ¿eso es todo? – posdef

+0

Sí. También puede agregar la documentación y el origen (en forma de jar) al proyecto en SVN, si lo encuentra útil.Al hacer clic derecho en la entrada Bibliotecas referenciadas para la biblioteca, debe tener la oportunidad de definir dónde están ubicadas las bibliotecas javadoc y/o fuente. –

+1

No estoy de acuerdo. Maven es apto para un proyecto de cualquier tamaño. Simplemente usa las funciones más simples: administración de dependencias y 'mvn package'. Demostrado por la experiencia: lleva 2 minutos configurarlo. – Bozho

4

Invierta tiempo para aprender a crear un proyecto usando Maven. Simplemente hace tantas cosas para ti que es increíble.

+0

Gracias por el consejo, pero no puedo decir que el enlace ayude mucho. Todavía no estoy seguro de qué se trata realmente Maven. Quiero decir que ya tengo un proyecto, uno en el que he invertido mucho tiempo. No estoy seguro de si deseo volver a empezar ... – posdef

+0

No se preocupe. Rehacer una cosa no lo hace más difícil. En realidad, es todo lo contrario y la segunda vez lo vas a hacer mucho, mucho mejor. No hay nada que perder, solo crea un proyecto usando maven create artifactory plugin y copia el código existente en los lugares que maven espera encontrar. –

0

No necesita tener un proyecto complicado o un proyecto totalmente nuevo para beneficiarse de Maven, así que seguiría el consejo que ya le dieron para intentarlo.

Si realmente no quieres, entonces realmente deberías consultar tus bibliotecas en SVN junto con tu código.Si hay una versión de su código se basa en una biblioteca específica en un momento determinado en el tiempo, entonces hay un contratoallí y, al no incluir las bibliotecas de SVN que está rompiendo contrato- que algo que ya has encontrado lo que pueda' t recrear su aplicación desde cero en otro lugar.

En cuanto a empacar en un solo JAR, esto es posible con Ant, pero ¿por qué lo necesitarías?

+0

Pensé que revisé mis bibliotecas, como se mencionó anteriormente, la mayoría de ellas están allí. Me confundí cuando me di cuenta de que algunos de ellos habían desaparecido. Me parece muy tedioso/irracional que Eclipse no copie los recursos externos en una sola carpeta, sino que los vincula de alguna manera. – posdef

+0

oh y en cuanto a la razón para empacar todo en un solo JAR; bueno, la mayoría de las veces lo pondremos a disposición del público y por esa razón me gustaría mantener las cosas simples y limpias. El usuario encuentra el único archivo java que quiere obtener, que contiene todo, descarga y usa el software sin tener que configurar nada. – posdef

2

bien creo que esto puede ser resuelto ..

En Eclipse en la pantalla Java Build Path también hay una opción bibliotecas tarro de importación que le permite elegir el proyecto lib folder..in hecho no es una opción carpeta etiquetada, creo ...

La otra cosa, ya que se implementará en un servidor, tendrá que tener cada jar en la carpeta lib.

Hay una técnica ant donde se verifica una clase y una propiedad en el contenedor para verificar que es el archivo jar correcto que se debe importar de la carpeta lib antes de continuar con esa secuencia de compilación. Realice una búsqueda en Google y lo hará encuentre las publicaciones al respecto ...

0

En nuestra empresa tenemos un repositorio SVN separado para bibliotecas de terceros, y tenemos una regla de la empresa de que en cada estación de trabajo de desarrollo este repositorio se compruebe en C: \ dev. Entonces, cada uno, tiene las bibliotecas en el lugar correcto y los proyectos funcionan bien.

+0

por lo que está sugiriendo que debería tener un representante SVN por separado para almacenar las bibliotecas, y de alguna manera vincular el proyecto al representante de lib? – posdef

+0

Básicamente, sí. – huo73

2

Las tres opciones son:

  • Maven (refcard) - una herramienta muy poderosa, pero al mismo tiempo muy fácil de usar. Lo uso en todos mis proyectos, sin importar cuán pequeños sean. Es gestión de la dependencia + herramienta de construcción en una
  • Ivy - como experto, pero es sólo una herramienta de gestión de la dependencia. Habría que hacer su obra con la hormiga
  • cometen frascos & archivos de proyecto Eclipse - esto no es portátil entre entornos de desarrollo, pero en realidad no es tan horrible y se utiliza en muchos proyectos

Actualización: unos pocos palabras que explican la ideología maven:

  • convención sobre la configuración: usted estructura su proyecto de una manera predefinida. Eso no tiene que ver con la gestión de la dependencia, así que simplemente mencionarlo.
  • repositorios - que es donde los archivos jar en realidad residen. No residen en su SVN, porque tienen un mecanismo separado de control de versiones y porque ocupan espacio innecesario.
  • IDEs integran con maven. Por ejemplo, m2eclipse obtiene las dependencias maven y las agrega a su ruta de compilación eclipse, haciendo transparente el uso
  • resolución de dependencia - en pom.xml define múltiples etiquetas <dependency>, con nombre y versión, y maven recupera todos los archivos jar requeridos del control remoto repositorios. También recupera las jarras de las que dependen sus dependencias (dependencias transitivas). Por lo tanto, no terminas teniendo NoClassDefFoundException.

Para mí esto es muy sencillo: se define lo que necesita, y experto decide cómo se puede bajar, y la forma de añadirlo a la ruta de clases.

+3

Maven es "muy fácil de usar" es discutible. Necesitas la mentalidad correcta. –

+0

bueno, sí, tienes que 'pensar de la manera maven', pero no está lejos de 'mejores prácticas', así que ... :) – Bozho

+0

Voy a tener que estar de acuerdo con Torbjörn, lo que es fácil de usar es muy subjetivo con con respecto a los antecedentes, experiencia y competencias. He estado tratando de entender el refcat, y la hoja de trucos anterior, así como la documentación en la página de inicio, pero no puedo decir que he hecho mucho progreso, aunque el lenguaje utilizado es inglés simple ... Lo que Creo que lo que necesito es ver activa e intuitivamente qué bibliotecas se necesitan y dónde están. Sería genial mantenerlos en un solo lugar automáticamente, si es posible. – posdef

Cuestiones relacionadas