【问题标题】:Relative path on JAR file used in a web applicationWeb 应用程序中使用的 JAR 文件的相对路径
【发布时间】:2012-03-02 20:47:57
【问题描述】:

我有一个必须从属性文件中读取的 Java 应用程序(非 Web)。此 Java 应用程序还必须导出为 JAR 文件,然后在 Web 应用程序中使用,但属性文件不在 JAR 文件中。它看起来像这样:

/webapps/MyWebApp/WEB-INF/myJavaApp.jar
/webapps/MyWebApp/WEB-INF/config.properties

因此,在编写将导出为 myJavaApp.jar 的 Java 应用程序时,我无法执行此操作,因此它会从相对路径读取 config.properties 文件。如果我放置一个绝对路径,它可以正常工作:

properties.load(new FileInputStream("C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/MyWebApp/WEB-INF/config.properties"));

但是,如果我尝试使用相对路径,它就不起作用。我从这里或其他网页尝试了不同的解决方案,但没有一个有效。

差点忘了,我正在读取属性文件的类是静态的!

【问题讨论】:

    标签: java path relative-path


    【解决方案1】:

    如果您确定文件在classpath 上,那么您可以简单地使用YourClassName.class.getResourceAsStream("/config.properties") 加载它。这将是实现它的最简单方法。 对于您的 Web 应用程序,您将文件放在 WEB-INF/classes/ 中,对于您的独立应用程序,您只需在启动应用程序时设置类路径。

    【讨论】:

    • 它正在工作!我添加了../../../config/config.properties 以便将属性文件放在Web 应用程序目录的顶部。现在的问题是,对配置文件的任何修改都需要重新启动 Tomcat 才能应用:(。有没有办法避免这种情况?因为当我使用绝对路径时,我能够即时修改配置文件'。谢谢
    • 您不想使用相对路径../../../config/config.properties。类路径(或者可能是子目录)是该资源存在的理想场所。
    • 至于Tomcat必须重新启动,可能是使用antiResourceLocking,导致所有内容都复制到其他地方?
    • 感谢您的帮助。我将配置文件放在这样的文件夹中,以便维护人员更容易找到它,尽管如果此更改有任何含义,我会将其再次交换到类路径。关于antiResourceLocking,Tomcat 配置是默认的,所以我不知道会发生什么。我一直在阅读一些关于 antiResourceLocking 的文档,我一直在尝试将其设置为 false 或 true,但它也不是“重新加载”属性:/
    【解决方案2】:

    在您的Java应用程序中,您可以通过以下方式获取当前目录的绝对路径:

     System.getProperty("user.dir");  
    

    假设您有config.properties 驻留在同一目录中,您应该能够在您的 java 代码中找出该文件的绝对路径,并且您可以将它部署到任何地方,而无需在代码中硬编码绝对路径。

    编辑:

    如果你的 Java App 是一个可执行的 JAR,上面的命令只有在直接调用时才会返回正确的目录。如果你从另一个进程间接调用这个应用程序,在windows平台上,起始目录将是windows/system32,所以你必须分析你的jar是如何被调用的。如果是后者,最好在您的 Web 应用程序中添加功能以向 jar 提供属性文件的路径。

    【讨论】:

    • 它在测试 Java 应用程序时工作,但一旦它作为 JAR 导出并执行到 Web 应用程序中,它就不起作用了。还是谢谢!
    • 将其导出到 JAR 不应该改变结果,原因可能是您执行此 jar 的位置的引用。您的相对路径很可能来自该参考。由于您的文件不是 JAR 本身的一部分(新 FileInputStream)
    • 我尝试将 config.properties 放在我能想到的任何目录中,但它不起作用。我不知道为什么,我想我做错了什么:/
    猜你喜欢
    • 2011-01-24
    • 2013-10-25
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多