【问题标题】:Grails: Provide a library to an external groovy scriptGrails:为外部 groovy 脚本提供库
【发布时间】:2012-04-03 23:08:24
【问题描述】:

我有什么: 使用 apache-commons-io 库的外部 GroovyScript

和一个工作的 grails 应用程序

在现有的 grails 应用程序中,有不同的外部脚本(目前只有 perl 脚本)与 grails 异步执行(使用执行方法)。

现在我得到了一个 GroovyScript,我想以与运行 PerlScripts 相同的方式运行它。

目前脚本在 lib 文件夹中有 commons-io-library。它工作正常。

所以我的问题是:如何以流畅而整洁的方式为 groovy-script 提供来自 grails 的 commons-io-library?我是否必须提供通过执行方法执行的命令中的路径

例如:

groovy -cp=path/to/grailshome/lib.jar scripfile.groovy

如果我将 grails 应用程序部署到当前生产环境中的 tomcat,这将不会真正起作用,因为 grails 中的库位于不同的路径中。

将脚本放入 grails 的 src/groovy 文件夹可能会起作用,但这不是我想要的方式。该脚本需要是独立的。

我真的被困住了,因为我并不真正精通 Grails 的技术细节。

即使是如何实现这一点的建议和想法也足够了。

希望你能理解这个问题,在此先感谢

【问题讨论】:

    标签: grails groovy classpath


    【解决方案1】:

    在这种情况下使用Grapes 并放置:

    @Grab( 'commons-io:commons-io:2.1' )
    

    在你的 groovy 脚本的顶部会有帮助吗?

    如果您将其作为战争来运行,那么这可能会起作用:

    String path = grailsApplication.parentContext
                                   .getResource( 'WEB-INF/lib/commons-io-1.4.jar' )
                                   .file
                                   .absolutePath
    

    【讨论】:

    • 我对 Grape 了解不多,但根据 Groovy 用户指南,它仅适用于 maven 依赖项,不幸的是它不是 maven 项目。如果没有必要拥有一个 maven-project 比 - 在我看来 - 这是多余的,因为 grails 默认情况下已经有 commons-io-library - 这就是我想提供给脚本的库
    • @Zobbl 为我的回答添加了另一个可能的解决方案
    • 嗯...我只是尝试使用 Grape-Annotation 并且它有效 - 我仍然认为它是多余的,因为 groovy 脚本不知道已经通过 grails 可用的库,但现在它有效 - 这很重要;)我也会尝试你的第二个建议 - 它对我来说“感觉”更好;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多