在我的项目中,我需要使用 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
答案 0 :(得分:0)
预计相对路径将从tomcat文件夹的根目录开始。假设有问题的文件在您的类路径上,您可以调用getResource
来访问它并将绝对路径传递给AVCommand
。