Grails WAR无法在java类中找到文件

时间:2017-06-06 19:35:21

标签: java grails war libav

在我的项目中,我需要使用 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

我也使用java接口作为avconv4java的libav。 它运行一个执行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

1 个答案:

答案 0 :(得分:0)

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