0

grails-app ディレクトリの特定のフォルダーにいくつかのファイルがあります。ブートストラップ中に、これらのファイルの 1 つ (最新のものは問題ではないとしましょう) をコピーし、それを 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 に答える