【问题标题】:Can't find file on classpath grails war/tomcat在类路径 grails war/tomcat 上找不到文件
【发布时间】:2011-08-09 14:34:08
【问题描述】:

我在我的 grails-app/conf 包中放入了一个名为 size_config.xml 的文件。当战争建立然后解压文件以预期名称显示在 WEB-INF/classes 中。但是,当我尝试在我的应用程序中引用该文件时,它声称找不到该文件。我已经尝试了所有我认为在尝试引用时合乎逻辑的组合,包括:

new File("WEB-INF/classes/size_config.xml")
new File("classes/size_config.xml")
new File("size_config.xml")
new File("grails-app/conf/size_config.xml")

这些似乎都不起作用。当我运行本地集成测试时,我使用“grails-app/conf/size_config.xml”,它发现文件很好。由于文件打包得很好,我假设它不是部署配置问题,而是一些我看不到的小项目。想法?

【问题讨论】:

    标签: file tomcat grails classpath


    【解决方案1】:

    试试这个:

    def servletContext = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext 
    def file = servletContext.getResource("/WEB-INF/classes/size_config.xml")
    

    【讨论】:

    • 目前正在尝试。仍然在本地工作,所以绝对没有伤害任何东西......只是等待构建和部署。
    • @Joseph 如果第一个不起作用。试试第二个。让我知道!那么我将编辑我的答案!
    • 第二种解决方案奏效了。非常感谢。您为我节省了更多尝试随机解决方案的时间!
    • @Joseph 很棒的家伙!我只会留下第二个选项!进一步搜索!
    【解决方案2】:

    您尝试使用File 将类路径资源视为本地磁盘文件系统路径,同时依赖无法从应用程序内部控制的默认工作目录。这个不对。您需要将其作为类路径资源获取。 /WEB-INF/classes 默认被类路径覆盖。所以你只需要从类路径中获取"size_config.xml"

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    InputStream sizeConfig = classLoader.getResourceAsStream("size_config.xml");
    // ...
    

    【讨论】:

    • 如果是这种情况,上述不工作是否表明设置有问题?我只是在本地和服务器上仔细检查了一下, size_config.xml 在 /WEB-INF/classes 下。关于什么会导致它无法正确加载到类路径的任何想法?
    • 我注意到我的示例中有一个错字。它应该在文件名中使用_ 而不是-。我会修正答案,但你有考虑到这一点吗?顺便说一句,资源不会“加载到”类路径。 “类路径”只是本地磁盘文件系统路径的集合,JVM 应该在其中扫描要由类加载器加载的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2010-11-22
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多