Java 作为可运行jar执行spring类时无法读取applicationContext.xml
我有一个带main方法的spring类。在类中,我试图读取applicationContext.xml的值。我的意图是jar这个主类及其从属jar、属性文件和applicationContext.xml 但是,当我尝试通过unix命令提示符运行jar文件时,似乎没有加载applicationContext文件 applicationContext.xml可以在jar文件中看到,我可以在类中看到sysoutJava 作为可运行jar执行spring类时无法读取applicationContext.xml,java,spring,Java,Spring,我有一个带main方法的spring类。在类中,我试图读取applicationContext.xml的值。我的意图是jar这个主类及其从属jar、属性文件和applicationContext.xml 但是,当我尝试通过unix命令提示符运行jar文件时,似乎没有加载applicationContext文件 applicationContext.xml可以在jar文件中看到,我可以在类中看到sysout ApplicationContext context = new ClassPathXml
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath*:**/applicationContext.xml");
当我打印上下文时,它会给我以下消息
org.springframework.context.support.ClassPathXmlApplicationContext@89fbe3: start
up date [Mon Oct 01 15:07:43 IST 2012]; root of context hierarchy
当我尝试打印context.getBeanDefinitionCount()时——它给我0
但我能够通过eclipse成功地执行此操作。它能够读取applicationContext.xml,并将bean计数设为13
我不知道当我将它作为jar运行时它为什么不工作。请帮助我提供您的评论。您是如何获得.jar包的?您是否使用了Eclipse导出向导?您可能已将“applicationContext.xml”放在“/resources”文件夹中。确保您修复了Eclipse中的“Java构建路径”。删除“/src/main/resources”文件夹中可能存在的所有排除标记。资源文件夹应该被视为类路径,而不仅仅是.jar包中包含一些xml文件的文件夹。希望能有所帮助。引用(我的重点): 请注意,“classpath*:”与Ant样式模式结合使用时,在模式启动之前,只能在至少一个根目录下可靠地工作,除非实际的目标文件驻留在文件系统中。这意味着像“classpath*:*.xml”这样的模式不会从jar文件的根检索文件,而是只从扩展目录的根检索文件。这源于JDK的ClassLoader.getResources()方法中的一个限制,该方法只返回传入的空字符串(指示要搜索的潜在根)的文件系统位置
我一直在为同样的问题挣扎。我可以从Eclipse内部很好地运行我的应用程序,但当我将其导出为可执行jar时,它失败了 我通过以下方式解决了这个问题:
/resources
文件夹上的过滤器。这会导致导出将META-INF
文件夹及其/resources
下的内容放入.jar
文件的顶层李>
applicationContext=新的类路径XmlApplicationContext(
“classpath*:META-INF/spring/applicationContext*.xml”)代码>
变成
applicationContext=new-classpath-xmlapplicationcontext(“classpath:META-INF/spring/applicationContext.xml”)代码>
我确信这是由于Eclipse环境和我的windows java环境之间的类加载器有所不同。下一个任务是弄清楚如何解决这个问题。jar文件只是一个zip文件。试着解开拉链,往里面看。应用程序上下文是否存在?它是否包含您期望的内容?是的,我解压后可以看到里面的applicationContext。但它仍然没有获取值。jar中是否只有一个applicationContext.xml?你确定在类路径上没有其他jar也可能包含applicationContext.jar吗?你有没有想过这个问题。我也遇到了同样的问题。如果你有新问题,请点击按钮提问。如果此问题有助于提供上下文,请包含指向此问题的链接。@JigarParekh用户只提到他们在解决问题时遇到了与上下文相同的问题。这是答案,不是问题。这是答案。谢谢