Qué hacer cuando tu proceso de compilación de hormigas craps en tu control de versiones

votos
2

Así que tengo un buen proyecto de Java, compilar con Ant a una carpeta / dist.
Todo el proyecto está bajo control de versión, por lo que puedo implementar la última versión simplemente mediante 'svn export' en la ruta a la carpeta dist.
Pero mi compilación sigue eliminando las carpetas .svn dentro de mi carpeta dist, y todos sus dependientes, porque limpia la carpeta al compilarla en lugar de sobrescribirla. El culpable preciso es JarBundler, la tarea Ant que crea mi paquete mac.app. Elimina la carpeta del paquete completo antes de volver a crearlo.
Obviamente esto craps mi svn, porque todas las carpetas .svn ahora faltan para esa carpeta y entonces dice que está en conflicto.

Alguien tiene alguna idea de cómo podría resolver esto? No puedo encontrar la manera de evitar que jarbundler elimine todo, así que tendré que hacer algo más hacky, me temo. También soy nuevo para Ant, solo como referencia.

Publicado el 21/10/2008 a las 05:04
por usuario
En otros idiomas...                            


5 respuestas

votos
0

Sencillo. No ingrese / dist in al control de versiones.

Version Control realmente no debería tener código / binarios / jarras / what-have-you generados.

Respondida el 21/10/2008 a las 05:06
fuente por usuario

votos
0

Probablemente me falta algo aquí, pero ¿por qué tiene sus productos integrados registrados en su sistema de control de origen ? En general, eso no se considera una buena práctica.

Si desea verificar los productos de compilación, cópielos en otro lugar (un directorio llamado "preconstruido", tal vez) y revíselos desde allí.

Editado para agregar: la razón por la que no debería necesitar hacer esto es porque, dada la fuente actual, debería ser capaz de recrear la distribución con un solo comando de compilación.

Respondida el 21/10/2008 a las 05:09
fuente por usuario

votos
3

Tener dist en el control de la fuente puede considerarse una buena práctica si desea que su sistema de control de origen sea un único referente para todos:

  • desarrolladores
  • ensambladores (pruebas unitarias)
  • probadores de homologación (consulta un montón de dist en su plataforma de integración y realiza sus pruebas de no regresión, pruebas de perfs, pruebas de estrés, etc.)
  • directores de lanzamiento de producción ...

PERO necesita tener un proceso de liberación adecuado para llevar esto a cabo.

En su caso, la construcción debe estar en un directorio separado y privado , que es un directorio que no está en subversión. Cuando la compilación está bien, la importa a subversión si es una versión oficial , o la importa a un directorio compartido si se trata de una compilación temporal, que el próximo equipo necesita (evitando así comprometer cientos de compilaciones en SCM, usando espacio por nada).

Nota: la principal ventaja de tener la entrega (dist) en su SCM es permitir que el proyecto dependiente funcione no con sus fuentes, sino directamente con su entrega (que en algún momento irá a la producción): si se las arreglan para hacer que su código funcione, al compilar con su entrega, es probable que su propio dist, cuando se implemente con su, funcione.
De esta forma, los otros equipos acceden a su entrega (su 'myProject.jar') a medida que acceden a cualquiera de sus fuentes: pueden leer a través del SCM la versión de su jar, su fecha, su historia, sus metadatos, su etiqueta y pronto.

Sin embargo, para un pequeño proyecto monolítico (como en 'ningún otro proyecto depende de él'), se puede argumentar que dist (la entrega final empaquetada) podría reconstruirse a pedido y almacenarse en un sistema referencial externo , como un externo Repositorio Maven, por ejemplo.
PERO: Maven no es un repositorio de SCM, lo que significa que debes firmar tu jar ('MyProject-1.0.jar'), no tienes historial y debes informar todos tus metadatos en un archivo de texto separado a lo largo de tu entrega. Cualquier otro proyecto que acceda a esa entrega en ese repositorio de Maven debe ajustar sus scripts y classpaths de acuerdo con la convención de nomenclatura de su versión.
Además, Maven es otro repositorio en su arquitectura de desarrollo. Siempre que pueda mantener el número de repos a un mínimo (de '1';)), es mejor.

Respondida el 21/10/2008 a las 05:17
fuente por usuario

votos
0

Bien, gracias a todos. Ahora entiendo por qué, filosóficamente, es una buena idea mantener desarrollos de SCM, y lo tendremos en cuenta para el futuro. Sin embargo, prácticamente, en este caso, soy el único desarrollador en este proyecto corto (4 semanas). Estoy usando svn para actualizar fácilmente la versión de lanzamiento en el servidor web público, a través de una conexión de baja velocidad, de modo que la actualización diferencial es esencial. Dado que nadie sugirió una alternativa fácil para actualizar las construcciones de implementación remota, se me ocurrió este pirateo hacky para evitar mi problema:

Supongamos que mi carpeta de compilación versionada es / dist. Bueno, le digo a mi script de construcción que construya en / dist-tmp, luego copie recursivamente todos los archivos de / dist-tmp en la parte superior de / dist, y finalmente elimine / dist-tmp.

Fueron algunas líneas adicionales en mi script de compilación Ant, y funciona muy bien.

La próxima vez, asegúrese de que el host de despliegue no sea windows, y luego un simple script rsync hará el truco, y luego puedo dejar compilaciones de SCM.

@VonC obtiene la respuesta correcta para la mejor explicación de la filosofía.

Respondida el 21/10/2008 a las 21:54
fuente por usuario

votos
0

Estoy de acuerdo en que no es una buena práctica poner productos incorporados en SVN.

Dicho eso, si tienes algunos requisitos para hacer esto que no puedes evitar, puedes utilizar uno de los sistemas de control de versiones más modernos como Git, Bazar y Darcs (hay otros, pero he usado estos tres).

Los tres solo colocan los metadatos de control de versiones en el directorio raíz, por lo que no hay metadatos en las subcarpetas, así que creo que no tendrías este problema ...

Respondida el 14/11/2008 a las 10:08
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more