代码之家  ›  专栏  ›  技术社区  ›  noah

Grails-确定人工制品类是否位于Grails应用程序的给定子目录中

  •  1
  • noah  · 技术社区  · 16 年前

    ArtefactHandler 我希望能够从中创造出艺术品 Script s(以支持传统格式)。我不想将所有脚本都制作成人工制品,但只想制作grails应用程序特定子目录中的脚本 grails-app/foo/ .

    我被困在试图找出路径的人工制品从我的眼睛 ArtefactHandler isArtefactClass 方法。有没有办法获取类的原始源的路径,或者以其他方式确定它是否包含在 grails-app/foo ?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Luke Daley    16 年前

    Grails实际上并不关心类在文件系统中的位置。那只是烟雾和镜子。因此,目前不支持基于位置的人工制品,但有一张罚单: http://jira.codehaus.org/browse/GRAILS-2174

    同时,最简单的解决方案是强制脚本具有特定的命名约定,或者可能引入某种标记注释。虽然在寻找注释,但我不确定如何内省脚本类。

        2
  •  0
  •   noah    16 年前

    卢克有上面的官方答案,但下面是我想出的方法:

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

    这可能有很多问题。首先,它依赖于DefaultGrailsApplication是GrailsApplication的实现,因此我们违反了封装。第二,它看起来像 loadGroovySource 对于内置的人工制品(如taglibs),返回null,因此这可能不适用于插件和以二进制形式分发的任何东西。

    推荐文章