1

我们有一个使用 Spring 框架的 Web 应用程序,效果很好。我们尝试在使用 maven 构建的独立应用程序中使用相同的 spring 上下文。我们设法通过在 Eclipse 中启动应用程序来获取上下文,主类使用以下几行实例化 Spring 上下文:

ApplicationContext ap = new ClassPathXmlApplicationContext("spring/applicationContext.xml");

但是当我们用 maven 构建一个 jar 并用命令行启动它时,我们会遇到错误。这是命令行:

java -jar application.jar

jar 包含一个 META-INF,它定义了 maven-jar-plugin 生成的类路径。

第一个弹簧因这个错误而失败

Unable to locate NamespaceHandler when using context:annotation-config 

我们通过合并来自 maven spring jar 的不同 spring.handler 文件并将结果放入我们的 application.jar 中解决了这个问题。这是此问题的常见解决方案,但这并不能解释为什么这在独立模式下失败但在 Web 应用程序和 Eclipse 中有效。Eclipse 和standalone 使用相同的代码(java 和spring 配置文件)。

现在我们面临第二个问题,一些 bean 实例化失败。我们的一些 bean 使用 XML 声明,其他一些 bean 使用注释声明。使用注解声明的 Bean 不会在独立模式下实例化,构造函数中的跟踪显示了这一点,因此引用这些 bean 的 XML bean 的实例化失败。我们还没有解决这个问题。

我们不明白为什么我们在 eclipse 或独立模式下观察到不同的行为。有什么可以解释的区别?eclipse如何调用java,它如何设置类路径?

感谢您的任何回复,米凯尔

4

0 回答 0