Spring Boot中的资源注入不能与gradle一起使用

时间:2014-08-31 22:13:01

标签: spring gradle spring-boot intellij-13

我有一个配置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 rungradle 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结束测试失败时。这很奇怪,我知道有不同的行为

1 个答案:

答案 0 :(得分:0)

我现在解决了这个问题。

帮助我的只是在intellij中做一个简单的clean build和重建项目。我正在使用大量的日食和maven,所以我预计它会自动发生。