【问题标题】:How can a Java class in a Jar read a external XML configuration file?Jar 中的 Java 类如何读取外部 XML 配置文件?
【发布时间】:2012-11-11 11:28:24
【问题描述】:

我有一个用于创建数据库连接池的通用 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 = new ClassPathResource("/db2.xml")resource = new ClassPathResource("lib/db2.xml")resource = new ClassPathResource("../lib/db2.xml");这一切都不起作用。如何为此设置相对路径。

resource = new ClassPathResource(CONFIGURATION_PATH);

这是一个 Java 项目。当我将 db2.xml 放入公共 jar 时,我就可以工作了。

【问题讨论】:

  • lib目录中添加db2.xml没有意义,还是试试"classpath:lib/db2.xml"
  • 什么意思?使用“classpath:lib/db2.xml”替换“db2.xml”作为配置路径?
  • 您不能将单个文件添加到类路径(罐子除外),您需要添加整个文件夹(如果您这样做,我不会使用“lib”,因为这会添加所有jar 文件两次)。
  • @BradyZhu :是的,尝试使用它。
  • Nandkumar Tekale:你的意思是我使用绝对路径作为配置路径吗? 'classpath:lib/db2.xml' = 类路径 + '/lib/db2.xml'?

标签: java spring jar path


【解决方案1】:

db2.xml 应该在类路径中。告诉我们您是如何运行 java 应用程序的。如果您使用 ide 之类的 eclipse,请将 lib 目录添加到类路径(构建路径)。如果您使用的是纯 java 命令,请使用以下命令在类路径中包含 lib 目录。

java -cp {path to lib directory},{what ever jars you have comma seperated} mainClass

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

【讨论】:

  • 我们通过命令行调用类,但是调用这个类的工作是别人负责的,所以我对运行命令行无能为力。
  • 那么您需要将此文件添加到 jar 文件中。 Lib 目录不在 classpath 中,因此 java 将无法找到它。所以你可以使用绝对路径(检查另一个使用 System.getProperty("user.dir") 的答案)试试看。
  • 我强烈建议联系其他负责人并编辑命令行命令以添加类路径条目
  • 感谢您的宝贵建议。对此负责的人是我的客户,他一定更喜欢最简单的方式来调用我们的班级。无论如何,我会直接将XML文件添加到jar中。至少它会解决问题。
【解决方案2】:

试试这个

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

【讨论】:

  • 因为这个jar应该适用于XP、Linux等各种操作系统平台,我猜这种使用绝对路径的方法是行不通的。
  • 它的工作目录,检查这个链接System Properties & 你试过了吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 2011-04-09
  • 2013-01-07
  • 2011-01-15
  • 1970-01-01
  • 2013-12-08
  • 2018-04-24
相关资源
最近更新 更多