Jar中的Java类如何读取外部XML配置文件?

Jar中的Java类如何读取外部XML配置文件?,java,spring,jar,path,Java,Spring,Jar,Path,我得到了一个用于创建数据库连接池的通用jar,其数据源XML配置为“db2.XML”,它位于这个jar的同一路径下,如: Project/ -- lib -- db2.xml -- common.jar 下面是读取db2.xml的代码: private BeanFactory() { try { beanFactory = new DefaultListable

我得到了一个用于创建数据库连接池的通用jar,其数据源XML配置为“db2.XML”,它位于这个jar的同一路径下,如:

Project/
       -- lib
              -- db2.xml
              -- common.jar
下面是读取db2.xml的代码:

    private BeanFactory() {
            try {
                beanFactory = new DefaultListableBeanFactory();
                xmlReader = new XmlBeanDefinitionReader((BeanDefinitionRegistry)
                   beanFactory);
                resource = new ClassPathResource("db2.xml");
                xmlReader.loadBeanDefinitions(resource);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }    
总是发生错误:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException 
parsing XML document from class path resource [db2.xml]; nested exception is 
java.io.FileNotFoundException: class path resource [db2.xml] cannot be opened 
because it does not exist
所以这一定是由于找不到“db2.xml”造成的。是否设置了配置文件
resource=newclasspathResource(“/db2.xml”)
resource=newclasspathResource(“lib/db2.xml”)
resource=newclasspathResource(“../lib/db2.xml”)
;我觉得这一切都不管用。如何为此设置相对路径

resource = new ClassPathResource(CONFIGURATION_PATH);
这是一个Java项目。当我将db2.xml放入公共jar时,我就可以工作了。

试试这个

    String userDir = System.getProperty("user.dir");
    File file =  new File(userDir+"/lib/db2.xml");

db2.xml应该位于类路径中。告诉我们您是如何运行java应用程序的。如果您使用的是类似于eclipse的ide,请将lib目录添加到类路径(构建路径)。若您使用的是纯java命令,那个么使用下面的命令将lib目录置于类路径中

java-cp{path to lib directory},{what ever jars your have comma separated}main类


默认情况下,java命令在类路径中不会有当前目录。

lib
dir中添加
db2.xml
是没有意义的,还是试试
“classpath:lib/db2.xml”
你是什么意思?使用“classpath:lib/db2.xml”替换“db2.xml”作为配置路径?您不能将单个文件添加到类路径(jar除外),您需要添加整个文件夹(如果这样做,我不会使用“lib”,因为这样会将所有jar文件添加两次)。@BradyZhu:yes,Nandkumar Tekale:你的意思是我使用绝对路径作为配置路径吗classpath:lib/db2.xml'=classpath+/lib/db2.xml'?因为这个jar应该在XP、Linux等各种操作系统平台上工作。我想这个使用绝对路径的方法不会工作。它的工作目录,检查这个链接&你试过了吗?我们通过命令行调用类,但是调用这个类的工作由其他人负责,因此,我无法运行命令行。然后,您需要将此文件添加到jar文件中。Lib目录不在类路径中,因此java无法找到它。因此,您可以使用绝对路径(检查另一个使用System.getProperty(“user.dir”)的答案)进行尝试。我强烈建议您联系其他负责人并编辑命令行命令以添加类路径条目谢谢您宝贵的建议。对此负责的人是我的客户,他们一定更喜欢用最简单的方式给我们班打电话。无论如何,我会直接将XML文件添加到jar中。至少它会解决这个问题。