Pregunta

¿Cuáles son las posibilidades de imponer restricciones en las dependencias de paquetes en un sistema de compilación Java? Por ejemplo, a la clase myapp.server.bl.Customer no se le debe permitir referirse al paquete myapp.client.ui.customlayout . Estoy interesado en soluciones basadas en Ant o específicas de IDE.

Me gustaría recibir un mensaje de error en la compilación que indique que se ha violado una regla de dependencia de paquete (personalizada) y se ha anulado la compilación. También me gustaría mantener las dependencias en una lista, preferiblemente en un archivo de texto, fuera de los scripts Ant o los archivos de proyectos IDE.

(No conozco a Maven, pero lo he leído aquí, tiene mejor soporte para la gestión de dependencias de módulos)

¿Fue útil?

Solución

Creo que Checkstyle tiene un cheque para eso. Se llama Import Control

Otros consejos

Puede configurar proyectos de Eclipse para especificar Reglas de acceso. Las reglas de acceso pueden especificar " Prohibido " ;, " Desalentado " ;, y " Accesible " Niveles todos con reglas comodín. Luego, puede configurar las infracciones de Desalentado o Prohibido para que se marquen como advertencias o errores durante las compilaciones.

Tipo de artículo anterior sobre la idea (los detalles pueden estar desactualizados):

http://www.eclipsezone.com/eclipse/forums/t53736.html

Si está utilizando complementos de Eclipse (u OSGi), entonces " público " Las partes del plugin / módulo están definidas explícitamente y esto es parte del modelo.

ivy parece ser una buena solución para su problema (si está usando ant). Ivy es el componente de gestión de dependencia oficial de Ant y, por lo tanto, se integra muy bien con ant. Es capaz de resolver dependencias, manejar conflictos, crear exclusiones, etc.

Utiliza una estructura xml simple para describir las dependencias y es más fácil de usar que Maven, porque solo trata de resolver los problemas de resolución de dependencias.

Desde la página de inicio de Ivy:

Ivy es una herramienta para administrar (registrar, rastrear, resolver y reportar) dependencias de proyectos. Se caracteriza por lo siguiente:

  1. flexibilidad y capacidad de configuración: Ivy es esencialmente agnóstica del proceso y no está vinculada a ninguna metodología o estructura. En su lugar, proporciona la flexibilidad y configuración necesarias para adaptarse a una amplia gama de procesos de compilación y administración de dependencias.
  2. integración estrecha con Apache Ant: mientras está disponible como una herramienta independiente, Ivy funciona particularmente bien con Apache Ant, que proporciona una serie de potentes tareas Ant que van desde la resolución de dependencias hasta la publicación y el informe de dependencias.

Para las soluciones específicas de IDE, IntelliJ IDEA tiene una herramienta de análisis de dependencias que permite definir también dependencias no válidas. http://www.jetbrains.com/idea/webhelp2/dependency- validation-dialog.html

La violación de dependencia se mostrará tanto al compilar como en vivo, mientras se edita la clase dependiente (como líneas de error / advertencia en la barra de error del lado derecho).

Se puede obtener aún más automatización con el servidor de compilación TeamBity de JetBrains, que puede ejecutar compilaciones de inspección e informar las comprobaciones configuradas anteriormente.

Para otra solución independiente de IDE, AspectJ se puede usar para declarar dependencias no válidas (e integrar el paso en el proceso de compilación para obtener información de advertencia / error para los problemas).

Eclipse tiene soporte para esto a través de las propiedades de Build Path / jar. Creo que solo puede funcionar a través de los límites del proyecto / jarra.

Tal vez Classsycle se puede usar: http://classycle.sourceforge.net/ddf.html

Puede usar múltiples módulos en IDEA o Maven o múltiples proyectos en Eclipse y Gradle. El concepto es el mismo en todos los casos.

Una interpretación trivial sería un módulo para myapp.server.bl y otro para myapp.client.ui.customlayout sin dependencias de tiempo de compilación entre ellos. Ahora, cualquier intento de compilar código o código completo contra el módulo / proyecto opuesto fallará como se desee.

Para auditar cuán extenso es el problema, un punto de partida útil para IntelliJ IDEA es Analizar las dependencias :

http://www.jetbrains.com/idea/webhelp/analyzing -dependencies.html

Desde ese artículo, puede ver cómo ejecutar y actuar en el análisis de dependencia para su proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top