如何在WAR中包含外部文件 - java.io.FileNotFoundException

时间:2014-04-07 08:43:23

标签: java tomcat grails war filenotfoundexception

我在tomcat(7.0.53)服务器上部署GRAILS应用程序(2.3.5),部署本身没有问题。当我单击测试控制器(使用src / data文件夹中的文件)时,出现此错误:

Error 500: Internal Server Error
URI 
   /schedulingAPI-0.1/tests
Class
   java.io.FileNotFoundException
Message
   /home/student/apache-tomcat-7.0.53/bin/src/data/room

我知道WAR会查看tomcat目录,而它应该查看WAR本身。我已经尝试在创建WAR之前将src / data文件夹(属性>添加类文件夹)添加到构建路径但是没有解决问题。

1 个答案:

答案 0 :(得分:2)

Grails documentation on deployment谈到了这一点。您可以使用的两个配置选项是grails.war.copyToWebApp和grails.war.resources。第一个允许您从" web-app"自定义WAR文件中包含的文件。目录。第二个允许您在最终创建WAR文件之前进行任何额外的处理。

BuildConfig.groovy

// This closure is passed the command line arguments used to start the
// war process.
grails.war.copyToWebApp = { args ->
    fileset(dir:"web-app") {
        include(name: "js/**")
        include(name: "css/**")
        include(name: "WEB-INF/**")
    }
}
// This closure is passed the location of the staging directory that
// is zipped up to make the WAR file, and the command line arguments.
// Here we override the standard web.xml with our own.
grails.war.resources = { stagingDir, args ->
    copy(file: "grails-app/conf/custom-web.xml",
         tofile: "${stagingDir}/WEB-INF/web.xml")
}

在您的情况下,您可以考虑使用自定义grails.war.resources命令:

grails.war.resources = { stagingDir, args ->
    copy(file: "src/bin/**",
         tofile: "${stagingDir}/bin")
}

所有这些当然取决于您打算将其他资源打包的路径。

更新AntBuilder的更高版本中包含多个文件,首选方法是使用fileset代替**表示法:

grails.war.resources = { stagingDir, args ->
    copy(todir: "${stagingDir}/bin") {
        fileset(dir: "src/bin")
    }
}