Grails: determine si una clase de artefacto está en un subdirectorio determinado de grails-app

StackOverflow https://stackoverflow.com/questions/2065615

  •  20-09-2019
  •  | 
  •  

Pregunta

Estoy implementando un Controlador de artefactos y quiero poder crear artefactos a partir de Scripts (para admitir un formato heredado).No quiero convertir todos los scripts en artefactos, sino solo aquellos en un subdirectorio particular de grails-app, digamos grails-app/foo/.

Estoy atascado tratando de descubrir el camino del artefacto desde mi ArtefactHandler's isArtefactClass método.¿Hay alguna manera de obtener la ruta a la fuente original de la clase o determinar si está contenida en grails-app/foo?

¿Fue útil?

Solución

A Grails en realidad no le importa en qué parte del sistema de archivos se encuentran sus clases.Eso es sólo humo y espejos.Como tal, actualmente no hay soporte para artefactos basados ​​en la ubicación, pero hay un ticket para ello: http://jira.codehaus.org/browse/GRAILS-2174

Mientras tanto, la solución más sencilla es forzar que los scripts tengan una determinada convención de nomenclatura o posiblemente introducir algún tipo de anotación de marcador.No estoy seguro de cómo hacer una introspección en las clases de script mientras busco anotaciones.

Otros consejos

Lucas tiene la respuesta oficial anterior, pero aquí está el truco que se me ocurrió:

if (Script.class.isAssignableFrom(clazz)
    && ((DefaultGrailsApplication) ApplicationHolder.getApplication()).
        getResourceLoader().loadGroovySource(clazz.getName()).
        getPath().contains("grails-app/foo")) {
    return true;
}

Lo que probablemente tiene muchos problemas. En primer lugar, se basa en DefaultGrailsApplication ser la implementación de GrailsApplication, por lo que estamos violar la encapsulación. En segundo lugar, parece que loadGroovySource devuelve un valor nulo para el construido en artefactos (como taglibs) por lo que este puede no funcionar en cosas como plugins y nada distribuidos en forma binaria.

EDIT: Parece que incluso no trabajar en la producción. Volver al tablero de dibujo ...

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