Author Topic: Compilación independiente de proyectos  (Read 6645 times)

remizero

  • Jr. Member
  • **
  • Posts: 66
  • Karma: 0
    • View Profile
    • Blog personal de programación y linux
Compilación independiente de proyectos
« on: Marzo 17, 2011, 08:20:41 am »
Buenas amigos del foro soy yo de nuevo  ;D.

Pido disculpas si no es el espacio indicado, estuve revisando y no encontré lugar mejor.

Después de desarrollar algunos sistemas, me he visto en la necesidad de re-estructurar mi forma de pensar y de desarrollar proyectos, lo que me ha hecho tomar mis mejores prácticas, códigos, mejores prácticas recomendadas por terceros y clientes y comenzar a desarrollar una pequeña API para facilitarme la vida al momento de iniciar nuevos proyectos.

He hecho un compilado de toda una serie se clases que siempre he utilizado y que con el paso del tiempo he ido optimizando y las he re-estructurado en paquetes de acuerdo con su utilidad y naturaleza, es decir:

Code: [Select]
com.remizero.errores.*;
com.remizero.basededatos.*;
com.remizero.misbeans.*;
.
.
.
org.remizero.archivos.*;
org.remizero.mensajes.*;
org.remizero.xml.*;

Cabe destacar que no todos los paquetes estan en un mismo proyecto, de hecho cada paquete es un proyecto independiente. y no solo son utilidades si no que tambien tengo mis propios beans. Por otro lado, algunos proyectos tiene dependencias de uno o varios proyectos (por lo de reusabilidad de código).

Pues bien, mi dilema se presenta a la hora de empaquetar en archivos .jar todos estos paquetes o proyectos.

La idea es que cada proyecto se compile de forma independiente, pero cuando intento generar mis archivos .jar, este los incluye dentro del mismo o en alguna carpeta definida no sé si por el IDE o por java.

Mis preguntas:

1.- ¿Como puedo hacer para que cada proyecto se contenga a si mismo en su propio .jar, sin tener que hacerlo uno a uno?

2.- De hacer esto, ¿Como podria indicarle al compilador o al IDE la estructura de carpetas han de contener estos jar generados?

Si conocen de algún patrón para hacer estas cosas, alguna práctica, algún texto que me hable de estas cosas se los agradecería muchisimo.

Trabajo con eclipse helios

De antemano muchisimas gracias.
Si quieres ver cambios, comienza por cambiar tu primero
http://www.remizero.blogspot.com/
http://www.ecosoftware.com.ve/

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Compilación independiente de proyectos
« Reply #1 on: Marzo 17, 2011, 04:07:06 pm »
No entiendo esto "pero cuando intento generar mis archivos .jar, este los incluye dentro del mismo o en alguna carpeta definida no sé si por el IDE o por java"

Generas el jar (supongo que de una de esas librerías) y ... ¿qué pasa? ¿no sabes dónde la genera? ¿mete cosas dentro que no quieres? ¿no sabes cómo añadirla a otro proyecto?

Se bueno.

remizero

  • Jr. Member
  • **
  • Posts: 66
  • Karma: 0
    • View Profile
    • Blog personal de programación y linux
Re: Compilación independiente de proyectos
« Reply #2 on: Marzo 17, 2011, 10:37:44 pm »
Gracias por responder Chuidiang.

Con respecto a lo que dices no entender.

Tengo los proyectos hechos y algunos estan relacionados (un proyecto llama a uno o varios proyectos y así con otros más), la cosa es que cuando genero el jar de alguno de ellos todas las dependencias que este tiene las coloca dentro del jar (generación basica de los jar en eclipse), otra opción para generar los jar me agrega las dependencias en una carpeta llamada miArchivoJar_lib.

Respecto a las preguntas
  • Si, genero el jar de una de esas librerías (de hecho lo estoy haciendo para todas).
  • Guarda la librería que estoy mandando a generar en su respectivo jar pero tambien las dependencias.
  • Si sé donde se genera el jar, de hecho yo mismo le indico donde quiero que lo genere.
  • Si, mete las dependencias de la libreria a generar y esto no quiero que lo haga (para no repetir las clases en todos los jar que tengan dependencia a una misma librería).
  • Si se como añadirla a otro proyecto, de hecho las he añadido a mis proyectos actuales

Ahora bien, digamos que quiero hacer una estructura de mi API de la siguiente manera:

Proyecto API
  • API
  • ayuda
  • configuracion
  • documentacion
  • imagenes
  • librerias (librerias de terceros)
  • modulos

Y cuando genere mis jar guardarlos en la carpeta API (hasta aqui eso esta bien, de hecho ya lo hago).

Pero lo que no quiero es que cuando genere el jar, me guarde las librerías de otros proyectos porque esas librerías ya las tengo dentro de la carpeta API.

Digamos que en mi proyecto_1 (Desde eclipse) tengo la necesidad de usar algunas clases o métodos de un proyecto_2 y de un proyecto_3. Quiero que al generar el jar, la dependencia que tenga de esos proyectos la tome de algún jar de esta carpeta API.

Es decir, que después de generar  el jar del proyecto, el proyecto_1.jar haga referencia a proyecto_2.jar y a proyecto_3.jar, dentro de la carpeta API.

Hay alguna forma de hacer esto?

O estoy metiendome en la boca del lobo? jejeje

Desde ya muchas gracias, sigo invertigando sobre directivas de compilacion para java y eclipse.
Si quieres ver cambios, comienza por cambiar tu primero
http://www.remizero.blogspot.com/
http://www.ecosoftware.com.ve/

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Compilación independiente de proyectos
« Reply #3 on: Marzo 18, 2011, 01:59:28 am »
Hola:

No suelo generar los jar con eclipse, pero por lo que comentas creo que se podría solucionar de la siguiente forma.

No hagas que tu proyecto principal dependa de los proyectos librería. Genera los jar de los proyectos librería y guárdalos donde quieras. Luego haz que tu proyecto principal dependa de esos jar (add external jar en otra de las pestañas de las dependencias de proyecto).

Se bueno.

remizero

  • Jr. Member
  • **
  • Posts: 66
  • Karma: 0
    • View Profile
    • Blog personal de programación y linux
Re: Compilación independiente de proyectos
« Reply #4 on: Marzo 26, 2011, 02:00:07 am »
Hola Chuidiang.

Gracias por el consejo y vaya que me ha servido de mucho.

Por otro lado, creo que no me exprese bien con lo que quería.

Lo que buscaba era que los jar que yo genere, poder indicarles cual es el path de los jar de los cuales este depende y así poder estructurar mejor mis proyectos. Sabia que tenia que modificar el archivo MANIFEST.MF, pero no sabia como, ahora después de haber estudiado la estructura y propiedades del mismo ya se como hacerlo.

Lo que tengo que hacer es lo siguiente en el archivo MANIFEST.MF:

Code: [Select]
Class-Path: . ruta/de/mi/archivo.jar ruta/de/mi/otro/archivo.jar

Ahora, una consulta adicional, he estado leyendo mucho sobre ant, maven, y otros gestores de construcción de proyectos, estos sirven para lo que quiero hacer?

Es decir, como comente en el post anterior digamos que tengo esta estructura del sistema

Sistema
  • api
  • ayuda
  • configuracion
  • documentacion
  • imagenes
  • librerias (librerias de terceros)
  • modulos

Y que cuando mande a generar mis jar los guarde cada uno en la carpeta que corresponda, bien sea api, modulos, etc., claro previa configuración supongo :S

De antemano muchas gracias por la ayuda prestada.
Si quieres ver cambios, comienza por cambiar tu primero
http://www.remizero.blogspot.com/
http://www.ecosoftware.com.ve/

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Compilación independiente de proyectos
« Reply #5 on: Marzo 26, 2011, 03:23:21 am »
Sí, ant y maven te pueden servir para eso. También otro que se llama ivy.

ant es el de digamos más bajo nivel. Puedes hacer lo que quieras, pero te lo tienes que hacer tú, ya que no tiene nada por defecto. Es una forma de definir la forma de compilar, donde están los jar, etc a base de ficheros xml. Pero como te digo, en cada proyecto tienes que definirte todo desde cero y es tu responsabilidad hacerlo igual en todos los proyectos.

ivy no lo he usado nunca, pero por lo que he visto es un nivel intermedio. De alguna forma él define dónde se dejan los jar y dónde se buscan, pero eres tú el que dice cómo compilar y tal.

maven te lo da todo más definido y tienes que hacer menos trabajo, pero te deja menos libertad. El define cómo es la estructura de un proyecto (directorio src, target, etc), define dónde se dejan los jar, dónde se busan y el te compila todo con casi cero configuración, te genera los jar, el javadoc, un sito web del proyecto, métricas, etc, etc. Lo de "te deja menos libertad" tómalo con cuidado. maven viene con una configuración por defecto que funciona bien (los fuentes están en src, los jar generados se dejan en target, los jar de librerías se buscan en tal sitio) y si quieres puedes cambiarla, pero debes saber cómo.

Yo empecé con ant, me pasé a maven y ahora siempre uso maven, ya que la configuración por defecto me vale y me ahorra muchísimo trabajo de configurar/organizar mis proyectos. Como te digo no he usado nunca ivy.

Se bueno.
« Last Edit: Marzo 26, 2011, 03:25:52 am by chuidiang »

remizero

  • Jr. Member
  • **
  • Posts: 66
  • Karma: 0
    • View Profile
    • Blog personal de programación y linux
Re: Compilación independiente de proyectos
« Reply #6 on: Julio 21, 2011, 02:14:47 pm »
Perdón por reavivar este hilo, pero estuve estudiando mucho todos los gestores de proyecto que mencionaste (aunque más maven), si bien hacen lo que necesito, me limita un poco al trabajar con mis propias librerías, a parte que casi ningún artefacto se adapta a mi estructura de trabajo.

También me llena los proyectos de muchas api's que ni uso, que si bien las puedo eliminar se hace algo engorroso también.

Tal vez más adelante monte mis propios artefactos y repositorios y así si pueda trabajar con maven.

pero de verdad que ninguno me ha dado lo que necesito desde el punto de vista de simplicidad, y ademas que tengo ciertos proyectos que hacer, no puedo darme el lujo por ahora de estudiar a fondo maven o algún otro gestor, la curva de aprendizaje se me hace muy cuesta arriba por el trabajo :), pero sin duda es una buena solución y aprendí mucho más que esto jejeje.

Gracias nuevamente por los concejos.
Si quieres ver cambios, comienza por cambiar tu primero
http://www.remizero.blogspot.com/
http://www.ecosoftware.com.ve/

 

ey