web-app/に「templates」というフォルダがあります。ローカルで「run-war」を実行すると、これはうまく機能します。
new File('web-app/templates/').list()
フォルダ内のファイルを一覧表示できます。しかし、warファイルをリモートのTomcatにデプロイすると、リストは空になります。フォルダをwarファイルにコピーするようにgrailsに明示的に指示する必要がありますか?
おそらく、あなたが探しているのは次のとおりです。
def baseFolder = grailsAttributes.getApplicationContext().getResource("/").getFile().toString()
def dirList= new File(baseFolder + "/templates").list()
これは、TomcatにWARをデプロイするときに機能しました。私の場合、baseFolderは私のアプリのweb-appディレクトリへの絶対パスでした。
http://googolflex.com/?p=664を参照してください
コードは、「分解される」warファイル(構成に応じてTomcatにある場合とない場合があります)と、コンテナーがアプリケーションの「現在のディレクトリ」として設定するものの両方に大きく依存します。
IIRC、Java EE仕様では、ファイルシステム内で直接安全にアクセスできる唯一の場所は、System.getProperty( "java.io.tmpdir")で識別される一時ディレクトリであるとされています。
もちろん、多くのアプリケーションはそれ以外のことをしますが、それは非標準であり、したがって壊れやすいものです。
最も安全な方法は、テンプレートディレクトリをクラスパス(つまり、warファイルのWEB-INF / classesディレクトリの下のツリーのどこかに)に配置し、ClassLoaderとそのfindResourceおよびgetResourceメソッドを介してそれらにアクセスすることです。