Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作为可运行jar执行spring类时无法读取applicationContext.xml_Java_Spring - Fatal编程技术网

Java 作为可运行jar执行spring类时无法读取applicationContext.xml

Java 作为可运行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

我有一个带main方法的spring类。在类中,我试图读取applicationContext.xml的值。我的意图是jar这个主类及其从属jar、属性文件和applicationContext.xml

但是,当我尝试通过unix命令提示符运行jar文件时,似乎没有加载applicationContext文件

applicationContext.xml可以在jar文件中看到,我可以在类中看到sysout

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时,它失败了

我通过以下方式解决了这个问题:

  • 转到Eclipse中的构建路径屏幕并删除
    /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用户只提到他们在解决问题时遇到了与上下文相同的问题。这是答案,不是问题。这是答案。谢谢