总结:我有一个非常基本的Java 1.8和Spring 4.0.5项目,我正在使用Maven 3.2.3来管理它。 Maven exec似乎无法看到我的Spring上下文,即使在我看来它是在类路径中。
我的春天语境在
<project root>/src/main/resources/spring/ch2-beans.xml
我用以下方法加载它:
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring/ch2-beans.xml");
在“mvn clean compile”之后我看到了
<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”,但没有修复它。
答案 0 :(得分:0)
我试图加载的Spring配置的文件名中有一个连字符,看起来类加载器不会接受它。连字符在Java中的标识符名称中是非法的,显然这也适用于外部资源。
一旦我从xml文件名中删除了连字符,就找到了它。
在相关的说明中,我对#34; Beginning Spring&#34;非常恼火。使用这些带连字符的名称的书籍示例。