我一直在研究与Spring PropertyPlaceholderConfigurer
bean和相关类路径相关的问题,但到目前为止还无法解决我的问题。我正在对一个名为myApp
的旧程序进行一些更改,该程序以Jar的形式运行,并为"myApp"定义了一个外部属性文件myApp.properties' file, which lives in a directory called 'config' within my application directory. In the
applicationContext.xml文件
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:myApp.properties</value>
</list>
</property>
这个应用程序在Netbeans中构建和运行时工作得很好,因为我包含了config
文件夹以及构建和运行的所有JAR依赖项。但是,当我尝试使用java -jar myApp.jar
从命令行运行它时,我会得到以下错误:
08/01/2016 15:37:18.562 | ERROR | Unable to start the application. | org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [myApp.properties] cannot be opened because it does not exist
我知道我需要正确地指定类路径,这样Spring就知道在哪里可以找到属性文件,但我不确定如何做到这一点,所以任何指针都会很感激。。。
最终对我起作用的是:
java -cp "myApp.jar;lib/*;config" com.myCompany.myApp.Main
(是的,带有main()方法的类也被称为main。不,我没有写这个程序:)
我的类路径指定包含主类的JAR、包含运行该应用程序所需的所有其他JAR的目录lib
(使用"*"字符以避免必须写出该目录中每个JAR的名称),以及包含各种配置文件的"config"目录。我还发现,我可以在属性配置器定义中指定myApp.properties
,而不需要任何限定符,这样我就可以将该文件与"myApp.jar"保持在同一目录中,而不会出现问题。
Try,
java-classpath".;\config*"-jar myApp.jar