java - Maven exec 未找到 Spring XML 文件

标签 java spring maven

摘要:我有一个非常基本的 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/

相关文章:

Java-声明新的泛型集时出现意外的类型错误

java - 我似乎无法更改 javafx 中的场景

java - 是什么导致 Spring 调度程序在应用程序和 servlet 启动之前执行?

java - Storm 示例甚至可以在没有 Zookeeper、Nimbus 和 Supervisor 进程的情况下运行

java - Maven 不断搞乱我的 Java 编译器和构建路径设置

java - DBUnit 在删除数据集时抛出 NoSuchColumnException

java - BufferedReader——通过 token 而不是 readLine() 读取?

spring - 如何防止 Spring MVC 中 F5 上的确认警报

java - 获取 com.sun.xml.wss.XWSSecurityException 的 NoClassDefFoundError

Maven:POM 中的变量插值