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