Maven exec

时间:2015-08-28 14:48:31

标签: java spring maven

总结:我有一个非常基本的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”,但没有修复它。

1 个答案:

答案 0 :(得分:0)

我试图加载的Spring配置的文件名中有一个连字符,看起来类加载器不会接受它。连字符在Java中的标识符名称中是非法的,显然这也适用于外部资源。

一旦我从xml文件名中删除了连字符,就找到了它。

在相关的说明中,我对#34; Beginning Spring&#34;非常恼火。使用这些带连字符的名称的书籍示例。