所以我尝试使用GetResource引用战争中打包的文件作为我的grails应用程序的一部分,使用:
grailsApplication.mainContext.getResource)
奇怪的是它适用于Elastic Beanstalk(Tomcat 7 32位),如果我使用" grails test war"在OSX上。但是,如果CI服务器(在Linux EC2实例上运行的TeamCity)使用相同的命令构建和部署,则永远不会找到该资源。
我看过很多文章都在谈论某些环境如何解开战争,但我不认为这是问题,因为这是两次不同的战争被发送到相同的环境。一场战争有效,另一场没有
我检查过的事情: 1)war文件的大小几乎相同,都有WEB-INF中的文件 2)两台机器上的Java版本相似(JDK 1.6) 3)我在两者上使用相同版本的grails(2.0.4) 4)我在两者上使用相同的命令(grails test war) 5)代码是相同的(都来自相同的git repo)
有什么想法?我已经读过我可以使用GetResourceAsStream,但我使用的是一个回复物理文件的电子邮件插件。我每次都可以将流写入文件,但这并不是一个很好的选择。
任何?
答案 0 :(得分:1)
Grails有一个bean,称为grailsResourceLocator
。这将适用于开发和部署环境。例如:
package com.mrhaki.templates
import groovy.text.SimpleTemplateEngine
class MessageService {
def grailsResourceLocator
String template
String followUpMessage(final String user, final String subject) {
final Resource template = grailsResourceLocator.findResourceForURI(template)
final Map binding = [user: user, subject: subject]
final SimpleTemplateEngine templateEngine = new SimpleTemplateEngine()
templateEngine.createTemplate(template.URL).make(binding)
}
}
此示例取自here。