我有一个配置bean。
@Component
public class Config {
@Value("classpath:${app.file.name.srgbicc}")
public Resource icc;
@PostConstruct
void init(){
try {
tempdir = Files.createTempDir();
newIcc = copyIccFileToTemp();
}catch (IOException e){
throw new RuntimeException(e);
}
}
private File copyIccFileToTemp() throws IOException {
File tempIcc = new File(tempdir, icc.getFilename());
FileUtils.copyFile(icc.getFile(),tempIcc);
return tempIcc;
}
}
在icc.getFile()
上有一个FileNotFoundException
application.properties
app.file.name.srgbicc = sRGB.icc
我查看了我的类路径,发现了以下情况:
build/classes/main (no icc file)
build/resources/main (icc file, application.properties)
在应用程序启动期间打印出我的类路径时,我只找到了...myApp/build/classes/main
。
那里没有../build/resources/main
或../src/main/resources
条目。
所以我想知道为什么资源不在类路径上? 根据{{3}} 这应该是。
当然,如果我将icc文件放在build/classes/main
中,它的全部工作正常,但它不应该在那里。正确?
我尝试使用gradle run
或gradle bootRun
在intellij中使用static main
运行应用程序。好处是应用程序的失败始终与我的启动无关。
我的项目布局
myApp
src
main
java
pkg
Config.java
resources
sRGB.icc
application.properties
供参考: IntelliJ 13 spring-boot 1.1.5 Fgradle 2.0
更新 这是我的代码的精简示例 http://docs.spring.io/spring-boot/docs/1.1.5.RELEASE/reference/htmlsingle/#build-tool-plugins-gradle-running-applications
我在config.init中删除了@PostConstruct并使用gradle build运行应用程序所有测试都是成功的,当我从intellij结束测试失败时。这很奇怪,我知道有不同的行为
答案 0 :(得分:0)
我现在解决了这个问题。
帮助我的只是在intellij中做一个简单的clean build
和重建项目。我正在使用大量的日食和maven,所以我预计它会自动发生。