0

我在特定文件夹中有一些文件到 grails-app 目录中。在引导期间,我想复制其中一个文件(假设是最新的,没关系)并将其复制到 web-app 文件夹中,以使其可供 grails 应用程序访问。

你会怎么做?我写了这样的东西:

class BootStrap {
    GrailsApplication grailsApplication

    def init = { servletContext ->
        // ...

        def source = new File('grails-app/myFolder/my-file-'+ grailsApplication.metadata.getApplicationVersion() +'.txt')
        def destination = new File('web-app/my-current-file.txt')

        source?.withInputStream { is ->
            destination << is
        }

        // ... 
    }
}

但是我很难确定源文件和目标文件的正确路径(获取 FileNotFoundException)。我已经仔细检查了文件夹和文件名,我的问题是相对路径的起点。

引导程序是执行这种操作的好地方吗?

与往常一样,提前致谢。

4

2 回答 2

2

我是用 Bootstrap 做的(请阅读完整的答案):

class BootStrap {
    GrailsApplication grailsApplication

    def init = { servletContext ->    
        def applicationContext = grailsApplication.mainContext
        String basePath = applicationContext.getResource("/").getFile().toString()

        File source = new File("${basePath}/../grails-app/myFolder/" + grailsApplication.metadata.getApplicationVersion() +'.txt')
        File destination = new File("${basePath}/my-current-file.txt")

        source?.withInputStream {
            destination << it
        }
    }
}

但是,正如 Muein Muzamil 所建议的,最好的方法是事件。这是他应用于我的示例的解决方案:

eventCompileEnd = {
    metadata = grails.util.Metadata.getCurrent()
    appVersion = metadata."app.version"

    ant.copy(file: "${basedir}/grails-app/myFolder/${appVersion}.txt", tofile: "${basedir}/web-app/my-current-file.txt")
}
于 2013-01-03T10:20:10.993 回答
1

如何挂钩到 Grails 事件。目前作为项目编译步骤的一部分,我正在将外部配置文件从 conf 文件夹复制到类路径。所以你可以做类似的事情。

这就是我在 _Events.groovy 文件中的内容:我想你可以做类似的事情。

eventCompileEnd = {
ant.copy(todir:classesDirPath) {
  fileset(file:"${basedir}/grails-app/conf/override.properties")
}}
于 2013-01-02T15:56:08.400 回答