2012-10-01 72 views
5

我有一个主类的弹簧类。在类中尝试读取值applicationContext.xml。我的意图是将这个主类与它的依赖jar,属性文件和applicationContext.xml一起jar。无法读取applicationContext.xml作为可运行jar执行弹簧类

但是当我尝试通过unix命令提示符运行jar文件时,它看起来像applicationContext文件没有被加载。

applicationContext.xml文件被认为是jar文件内,我能够看到用于读取的applicationContext.xml我class.The代码里面sysouts是

ApplicationContext context = new ClassPathXmlApplicationContext(
    "classpath*:**/applicationContext.xml"); 

当我打印方面它给我下面的消息。

org[email protected]89fbe3: start 
up date [Mon Oct 01 15:07:43 IST 2012]; root of context hierarchy 

当我尝试打印context.getBeanDefinitionCount() - 它给了我0.1

但我能够通过Eclipse成功EXCUTE这一点。它能够读取applicationContext.xml并给我豆数为13.

不知道为什么它不工作时,我作为一个jar.Please帮我与您的意见。

+0

jar文件只是一个zip文件。尝试解压缩并查找。应用程序上下文是否在那里?它是否包含您所期望的内容? – Pace

+0

是的,我是unzippped的,能够看到applicationContext inside.But仍然没有拿起价值。 – raga

+0

jar中是否只有一个applicationContext.xml?你确定classpath上没有其他的jar可能包含applicationContext.jar吗? – Pace

回答

1

你是怎么得到.jar包的?你使用Eclipse导出向导吗?很可能您已将“applicationContext.xml”放在“/ resources”文件夹中。确保你修复了Eclipse中的“Java Build Path”。删除“/ src/main/resources”文件夹中可能存在的所有排除标签。资源文件夹应该被视为类路径,而不仅仅是.jar包中的一些xml文件的文件夹。希望有所帮助。

2

Spring documentation(重点煤矿)引述:

请注意“的classpath *:”在与Ant风格的图案相结合,将只与至少有一个根目录下可靠地工作模式开始前,除非实际的目标文件驻留在文件系统中。这意味着像“classpath *:*。xml”这样的模式不会从jar文件的根目录中检索文件,而只能从扩展目录的根目录检索文件。这起源于JDK的ClassLoader.getResources()方法中的限制,该方法仅返回传入的空字符串的文件系统位置(指示要搜索的潜在根)。

-1

我一直在努力解决同样的问题。我可以从Eclipse内部运行我的应用程序,但是当我将它作为可执行jar导出时,它会失败。

  1. 要在Eclipse构建路径屏幕上/resources文件夹中删除过滤器:

    我已经解决这个问题的工作。这会导致导出将META-INF文件夹及其内容/resources置于.jar文件的顶层。

  2. 从应用程序上下文路径删除所有通配符:

    applicationContext = new ClassPathXmlApplicationContext( "classpath*:META-INF/spring/applicationContext*.xml");
    成为
    ​​

我相信这是由于在Eclipse环境之间的类加载器的一些区别我windows的java环境。弄清楚如何解决这将是下一个任务。

+0

如果您有新问题,请点击[问问题](http://stackoverflow.com/questions/ask)按钮。如果有助于提供上下文,请包含此问题的链接。 –

+0

@JigarParekh用户只提到他们如何解决问题,与上下文相同。这是一个答案,而不是一个问题。 – starsplusplus