Estamos teniendo un debate en mi oficina sobre lo que puede y no puede ir en un archivo JAR. Se ha sugerido que es mala forma tener todo lo que no sea un archivo .class en un archivo JAR. Actualmente tenemos algunas configuraciones XML para Ibatis/etc, algunos archivos de propiedades ... lo de siempre. Sin embargo, existe un impulso para extraer todos esos archivos de los JAR y colocarlos en el sistema de archivos local de cada máquina de despliegue. ¿Esto suena razonable?¿Está bien poner archivos de configuración en JAR?
Respuesta
No me parece razonable. Creo que la configuración de algunas aplicaciones debe estar en el archivo jar. Cosas tales como correlaciones de ORM, configuración de primavera, espacio de nombres de primavera personalizado XSD, otros XSD, etc. deberían estar en la mayoría de los casos en jar. Es una parte importante del artefacto de implementación.
El hecho de que no sea el archivo class
, no significa que deba sacarse del contenedor simplemente porque teóricamente se puede modificar sin crear un nuevo contenedor. ¿Te imaginas una modificación de * .hbm.xml en producción? para mí suena muy aterrador.
Creo que algunas configuraciones, como spring xml, se refieren en la mayoría de los casos a una mejor organización de su aplicación y dependencias, pero no a cambiarlas en tiempo de ejecución en producción.
Si realiza cambios en un archivo de configuración dentro de un JAR (incluso sin alterar ninguna línea de código Java), se debe reconstruir y volver a implementar todo el JAR. ¿Esto suena razonable?
Algunas veces no desea que las personas realicen cambios en un archivo de configuración, por ejemplo, si la configuración es específica del entorno. – Qwerky
¿Desea o espera que se modifiquen sin una nueva versión del código? Entonces necesitas extraerlos.
Si la respuesta a la pregunta no es que no debe extraerlos, ya que permitiría soporte para jugar con ellos sin pasar por el proceso de lanzamiento. (Por supuesto, esto también es posible si están en el JAR, pero un poco menos tentadores.)
Actualización: Pero como mencionó varias máquinas de implementación, hay una tercera opción: extraerlas y colocarlas en un área comúnmente accesible en una unidad de red. Los archivos de configuración editables manualmente que se replican en varias máquinas (pero deberían ser idénticos) son notorios por no estar sincronizados.
es mala forma de tener todo lo que no es un archivo .class entrar en un JAR
Eso no tiene sentido. De hecho, es muy forma buena para poner recursos como iconos y otros archivos de datos que el usuario utiliza por el código en el JAR junto con el código. Para esto sirven los métodos getResource()
y getResourceAsStream()
de Class
y ClassLoader
, y ofrece aplicaciones mucho más robustas que las que dificultan las rutas de recursos manualmente.
Sin embargo, archivos de configuración son posiblemente una cuestión diferente. Si están destinados a ser cambiados durante o después del despliegue, entonces tenerlos dentro de un archivo JAR es bastante inconveniente, y es preferible tenerlos en un directorio separado.
No se supone que las herramientas ORM (como Hibernate o IBatis) se modifiquen una vez que se implementa la aplicación. Entonces, no, yo diría que no tiene sentido para ese tipo de archivos.
Dependiendo de sus requisitos, los archivos de configuración de toda la aplicación se pueden colocar fuera del Jar/War para que puedan modificarse sin tener que reconstruir el contenedor. Tenga en cuenta que modificar los parámetros de la aplicación en producción es, en mi opinión, una mala práctica. Los cambios deben probarse primero en algún entorno de preproducción.
Es absolutamente bien para poner archivos que no son de clase en un fichero JAR, especialmente los recursos que necesita la aplicación (imágenes, cadenas localizadas, etc.) Sabiendo esto, usted debe decidir qué escenario se adapte a su situación:
- Si la configuración es fija y solo cambiará cuando se implemente un nuevo archivo JAR, colóquelo en el JAR.
- Si la configuración debe ser alterada, ya sea manualmente o por la aplicación, guárdela en el sistema de archivos.
Si elige este último, tenga en cuenta que es una buena práctica incluir una configuración por defecto en el archivo JAR para manejar el caso cuando el archivo de configuración externa no se encuentra. El valor predeterminado puede cargarse directamente desde el JAR o copiarse en el sistema de archivos para convertirse en la nueva configuración editable.
- 1. ¿Está bien poner JavaScript en vistas parciales?
- 2. ¿Está bien con archivos binarios?
- 3. ¿Está bien para poner comentarios antes de la declaración XML?
- 4. Ubicación para poner archivos de configuración de usuario en Windows
- 5. ¿Está bien incluir archivos externos en el manifiesto de caché?
- 6. Poner información de configuración en una DLL
- 7. Empaquetar archivos de Facelets (plantillas, incluidos, composites) en un JAR
- 8. ¿Está bien poner comentarios sobre correcciones de errores en el código fuente?
- 9. ¿Poner la biblioteca externa al JAR?
- 10. Java -jar: acceder al archivo de configuración externa
- 11. memcacheD Esto está bien?
- 12. ¿Está bien usar __doPostBack()?
- 13. Carga de archivos de JAR en Scala
- 14. Proguard problemas con archivos jar, ¿cómo encontrar el jar faltante?
- 15. ¿Cómo poner un jar en classpath en Eclipse?
- 16. ¿Está bien derivar de System.ArgumentException?
- 17. importando archivos jar externos
- 18. Archivos de configuración para ensambles en GAC
- 19. Android Eclipse NoClassDefFoundError para archivos externos .jar
- 20. ¿Cómo incluyo archivos JAR externos en mi propio proyecto JAR
- 21. ¿Está bien usar == en enumeraciones en Java?
- 22. Poner clases anidadas en archivos separados
- 23. Cómo buscar una cadena en archivos JAR
- 24. ¿Dónde poner archivos comunes de aplicaciones modificables?
- 25. ¿Está bien usar barras diagonales en lugar de File.separator en mis archivos de compilación (Gradle)?
- 26. ¿Está bien tener código en la raíz de un proyecto?
- 27. ¿Está bien para static_cast un puntero void *
- 28. ¿Está bien lanzar un java.lang.Error?
- 29. ¿Este código está bien definido?
- 30. ¿Está bien omitir "devolver ninguno"?
Se reduce a la cuestión de si esos archivos están destinados a ser editados por el usuario final de su aplicación, o si existen directivas de configuración dependientes de la máquina. – SirDarius