Actualmente estoy tratando de presentar un caso para adoptar la administración de dependencias para las compilaciones (ala Maven, Ivy, NuGet) y crear un repositorio interno para módulos compartidos, de los cuales tenemos más de una docena en toda la empresa. ¿Cuáles son los principales puntos de venta de esta técnica de construcción? Los que tengo hasta ahora:
- Facilita el proceso de distribución e importación de módulos compartidos, especialmente actualizaciones de versiones.
- Requiere que las dependencias de los módulos compartidos se documenten con precisión.
- Elimina los módulos compartidos del control de origen, acelerando y simplificando los checkouts / check ins (cuando tienes aplicaciones con más de 20 bibliotecas, esto es un factor real) .
- Permite un mayor control o conocimiento de qué bibliotecas de terceros se utilizan en su organización.
¿Hay puntos de venta que me faltan? ¿Hay algún estudio o artículo que proporcione métricas de mejora?
dependency-management
Cruzar
fuente
fuente
Respuestas:
No estoy 100% seguro de los aspectos positivos. Aquí hay algunos puntos negativos
A menudo terminas agregando dependencias a servidores / puntos finales de terceros que podrían no ser estables.
Me ha sucedido con Bower que el repositorio de algunas dependencias fue eliminado o movido. Entonces aparece un nuevo desarrollador, clona mi repositorio, escribe
bower install
y obtiene errores para repositorios inaccesibles. Si, en cambio, hubiera registrado el código de terceros en mi repositorio, ese problema desaparecerá.Esto se resuelve como sugiere el OP si está sacando deps de las copias guardadas en un servidor que ejecuta.
Más difícil para los novatos.
Trabajo con estudiantes de arte con muy poca experiencia en línea de comandos. Hacen arte con Processing, arduino, Unity3D, y se las arreglan con muy poco conocimiento tecnológico. Querían usar algunos HTML5 / JavaScript que escribí. Pasos por la glorieta
npm install -g bower
)bower install
(finalmente para obtener nuestras dependencias)Los pasos 2 a 5 se pueden eliminar si solo registramos los archivos en nuestro repositorio de github. Esos pasos probablemente suenen súper fáciles para ti y para mí. Para los estudiantes eran muy confusos y querían saber cuáles eran todos los pasos, dónde y para qué servían, lo que podría ser un buen aprendizaje, pero era completamente ortogonal al tema de la clase y probablemente se olvidó rápidamente.
Agrega otro paso al tirar.
Sucedió muchas veces que hago un
git pull origin master
y luego pruebo mi código y me lleva de 5 a 10 minutos recordar que necesitaba escribirbower install
para obtener las últimas versiones. Estoy seguro de que eso se resuelve fácilmente con algún gancho de script de extracción.Hace que la ramificación de git sea más difícil
Si 2 ramas tienen diferentes deps, estás jodido. Supongo que puedes escribir
bower install
después de cadagit checkout
. Demasiado para la velocidad.En cuanto a sus aspectos positivos, creo que hay ejemplos contrarios para cada uno de esos
vs que? Ciertamente no es más fácil de distribuir. Hacer un repositorio en lugar de 20 no es más fácil y es más probable que falle. Ver # 1 arriba
Por el contrario, significa que depende de otros para arreglos. Lo que significa que si sus departamentos están extrayendo de una fuente de terceros y necesita un error corregido, debe esperar a que apliquen su parche. Peor aún, es probable que no pueda simplemente tomar la versión que desea más su parche, tendría que tomar la última versión que podría no ser compatible con su proyecto.
Puede resolver eso clonando sus repositorios por separado y luego apunta sus departamentos de proyecto a sus copias. Luego aplica cualquier corrección a sus copias. Por supuesto, también podría hacerlo si solo copia la fuente en su repositorio
Eso parece discutible. Solo requiere que los desarrolladores pongan bibliotecas de terceros en su propia carpeta
<ProjectRoot>/3rdparty/<nameOfDep>
. Es igual de fácil ver qué bibliotecas de terceros se utilizan.No digo que no haya aspectos positivos. El último equipo en el que estuve tenía> 100 deps de terceros. Solo estoy señalando que no todas son rosas. Estoy evaluando si debería deshacerme de Bower para mis necesidades, por ejemplo.
fuente
install
pagar cada vez parece un defecto de diseño. Debe verificar su configuración cuando crea un proyecto: si hay cambios, debe reconstruir desde cero. Además, mover repositorios es irrelevante para Maven, ya que extrae artefactos del repositorio de Maven, que almacena artefactos, no los repositorios reales con código. Solo puede cambiarartifactId
ygroupId
en la próxima versión de su artefacto si lo publica en el repositorio de Maven. Entonces, sus puntos # 1 y # 4 son irrelevantes para Maven en particular. # 3 se puede reemplazar conmvn clean
(a veces)Echa un vistazo a la aplicación The Twelve Factor
En particular, lea sobre lo que tienen que decir sobre las dependencias . Notarás que un buen diseño proporciona un mecanismo declarativo para localizar dependencias, en Java esto a menudo se realiza a través de Maven. Ivy y NuGet funcionan bien, pero Maven es actualmente el líder en el campo e Ivy es decididamente un trabajo duro.
Si se adhiere al proceso de lanzamiento de Maven (desarrolle instantáneas hasta que esté listo un lanzamiento formal, nunca intente sobrescribir un lanzamiento anterior, use un administrador de repositorio adecuado como Nexus o Artifactory), entonces debería tener un proceso de compilación que funcione bien.
Una vez que tenga un sólido proceso de construcción declarativa, abre la puerta a otras buenas prácticas como la Integración continua con Jenkins , el Análisis continuo de código con Sonar y se encontrará buscando una mejor estrategia de ramificación de control de versiones usando git .
Cada uno de los anteriores se basa en el núcleo que es Maven. En estos días, es prácticamente una decisión obvia.
fuente
Y el artículo número 1 en nuestra lista de los 10 principales es ...
(redoble de tambor)
Cada desarrollador construye con exactamente las mismas versiones de todas las dependencias, por lo que nunca tendrá que preguntarse qué implementar en producción.
fuente