摘要:我有一个非常基本的 Java 1.8 和 Spring 4.0.5 项目,我使用 Maven 3.2.3 来管理它。 Maven exec 似乎无法看到我的 Spring 上下文,即使在我看来它位于类路径中。
我的 spring 上下文位于
<project root>/src/main/resources/spring/ch2-beans.xml
我使用以下方式加载它:
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring/ch2-beans.xml");
在“mvn clean编译”之后我看到了
<project root>/target/classes/spring/ch2-beans.xml
当我运行时:
mvn -X exec:java -Dexec.mainClass="com.wiley.beginning.spring.ch2.Main"
我看到以下调试输出,这让我认为类路径确实是正确的:
[DEBUG] Collected project classpath [/Users/me/Documents/workspace/BeginningSpring/chapter2/spring-book-ch2/target/classes]
[DEBUG] Adding to classpath : file:/Users/me/Documents/workspace/BeginningSpring/chapter2/spring-book-ch2/target/classes/
但是我收到以下错误:
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring/ch2-beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring/ch2-beans.xml] cannot be opened because it does not exist
有人可以指出我解决这个问题的方向吗?我上面发布的内容是解决这个问题的许多不同尝试的结果,当文件路径确实应该在类路径中时,我被这个错误难住了,所以也许自从我上次编码(不久前......)以来,这已经发生了变化。谢谢!
更新.. 认为这可能是 exec:java 的一些类路径问题,我在单元测试中运行了相同的代码,并在 maven 中执行。同样的错误。我也尝试将 xml 文件加载为“classpath:/spring/ch2-beans.xml”,但没有修复它。
最佳答案
我试图加载的 Spring 配置的文件名中有一个连字符,看来类加载器不会接受它。 Java 中标识符名称中的连字符是非法的,显然这也适用于外部资源。
当我从 xml 文件名中删除连字符后,它就被发现了。
与此相关的是,我对使用这些连字符名称的“Beginning Spring”书籍示例感到非常恼火。
关于java - Maven exec 未找到 Spring XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32273813/