我使用Netbeans 8.2开发Spring应用程序。我遇到麻烦的这个特定的应用程序是一个Spring Boot 1.5.3应用程序。我有一个spring xml文件和一个application.properties,它们保存在根项目目录下的/ config中。Spring Boot将文件从命令行执行添加到类路径
我通过@ImportResource
注释和像@ImportResource(value="${config.xmlfile}")
这样的值属性将弹簧xml文件传递到我的项目。
当我点击NetBeans中的“运行项目”按钮时,我的Spring应用程序启动并正确找到我的/ config文件夹中的application.properties文件。但是,对该文件夹中其他文件的任何类路径引用都将丢失。例如,将config.xml文件设置为classpath:config/file.xml
或classpath:file.xml
都无法找到该文件,但file:config/file.xml
工作。
同样,在命令行中运行时,我有以下为我的结构:
app/
|-- bin
| `-- app-run.sh
|-- config
| |-- application.properties
| |-- log4j2.xml
| |-- file.xml
`-- app-exec.jar
我使用spring-boot-maven-plugin
使罐子如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
和我的APP- run.sh脚本执行以下操作:
exec /bin/java -cp :.:../config/*:../app-exec.jar
-Dlogging.config=../config/log4j2.xml
-Dspring.config.location=../config/application.properties
-jar ../app-exec.jar
where/bin/java repres发送我安装了java的位置。在-cp中设置的类路径在这里似乎不起作用。同样通过IDE中运行时,设置config.xml文件中的类路径:配置/ file.xml或类路径:file.xml都无法找到该文件,但文件:../配置/ file.xml作品。
我希望能够将classpath设置在IDE和命令行,这样我可以在Spring中使用的类路径参照使事情更容易访问文件。我不想将它们都放在src/main/resources
中,并将它们打包在jar中,因为我需要在打包和部署后对它们进行编辑。
有没有人有任何想法或有帮助的提示?提前致谢!
感谢您的详细注释。它在命令中更改了-Dloader.path的位置之后起作用。 – Silentbang
@Silentbang很高兴这个答案帮了我一些忙,弄明白了。 Spring的这个主题领域的文档很不错,但在某些地方破坏了惯例,比如在传递给'-Dloader.path'时如何指定路径 – wrslatz