Grails WAR 在 java class 中找不到文件

Grails WAR can't find file in java class

在我的项目中,我需要使用 libav 来转换视频和音频。所以我需要在我的项目中包含 libav 工具。 这是我的项目结构:

grails-project  
 |  
 |-- .classpath  
 |-- .groovy  
 |-- .project  
 |-- .settings  
 |-- application.properties  
 |-- grails-app  
 |-- lib  
 |   |-- avconv -->>> `This is the folder which contains libav tools`
 |-- scripts  
 |-- src
 |   |-- groovy
 |   |-- java
 |   |   |-- Converter.class -->>> `This is my converter class`
 |-- target  
 |-- test  
 |-- web-app

我还为 libav 使用 java 接口,即 avconv4java。 它运行一个进程来执行 libav 命令,我这样设置 libav 路径:

AVCommand command = new AVCommand();
command.setToolPath("lib/avconv/bin/avconv.exe");

在 java 接口内,它将路径作为参数传递给 ProcessBuilder 并启动它等

在开发环境下运行的很好。但是,当我部署 war 并尝试转换视频时,出现以下错误:

java.io.IOException: Cannot run program "lib/avconv/bin/avconv.exe": CreateProcess error=2, The system cannot find the file specified

我查看了部署的结构,发现 avconv 文件夹不在 lib 文件夹中。所以我将这些行添加到 BuildConfig:

grails.war.resources = { stagingDir, args ->
   copy(todir: "${stagingDir}/WEB-INF/lib/avconv") {
       fileset(dir: "lib/avconv", includes:"**")
   }
}

现在 avconv 位于 lib 文件夹中 - 类似开发环境 - 但是,我仍然遇到同样的错误。我应该怎么做才能让它发挥作用?

感谢任何帮助。 提前致谢。

Grails 版本:2.4.5 智能开发 部署到 Tomcat 7

相对路径应从 tomcat 文件夹的根目录开始。假设有问题的文件在您的类路径中,您可以调用 getResource 来访问它并将绝对路径传递给 AVCommand.