2

是否可以在可运行 jar 文件的类路径中添加一些属性文件?我尝试了这些解决方案:

  1. 使用以下命令运行可执行文件:

    java -cp ../prop_dir/prop1.properties;../prop_dir/prop2.properties -jar MyRunnableJar.jar

  2. 添加到清单文件(在类路径部分)

    ../prop_dir/prop1.properties ../prop_dir/prop1.properties

但它们都不起作用。

运行目录的架构如下

+
+ MyRunnableJar.jar
+ prop_dir/
   + prop1.properties
   + prop2.properties

非常感谢,

丹尼尔

编辑

当我执行以下行时

System.out.println(System.getProperty("java.class.path"));

我在我的控制台中获得

MyRunnableJar.jar
4

7 回答 7

4

为了解决这个问题,我使用了一种解决方法:我没有运行可运行的 jar,而是运行了主类并将 jar 添加到类路径中。

我使用的命令如下:

java -classpath .;MyRunnableJar.jar;prop_dir; my.package.MyClass
于 2013-10-18T14:43:06.577 回答
1

prop_dir/prop1.properties prop_dir/prop1.properties清单中应该是这样吗?

还要检查这个问题:Java -jar : access external configuration file

于 2013-10-17T10:38:38.823 回答
0

您必须在类文件中相对于 .jar 文件位置引用 .properties 文件。对于 Windows(分号)和 Unix 环境(冒号),类路径分隔符是不同的。

对于窗户

java -classpath .;prop_dir; -jar Runnable.jar(在您的类文件中,属性文件应该通过类路径中的相对 URl 访问,例如“prop_dir/prop1.properties”)

对于 Unix 环境

java -classpath .:prop_dir: -jar Runnable.jar (在您的类文件中,属性文件应该通过类路径中的相对 URl 访问,例如“prop_dir/prop1.properties”)

代码:

在此处输入图像描述

输出:

在此处输入图像描述

于 2013-10-17T10:36:43.317 回答
0

添加一个 . 到 MANIFEST.MF 的 Class-Path 并将属性文件放在与可运行 jar 相同的级别对我有用。

java -jar MyExec.jar

MANIFEST.MF
Manifest-Version: 1.0
Main-Class: com.test.MyMain
Class-Path: . lib/MyDependent1.jar lib/MyDependent2.jar

加载属性文件的代码片段应该像

ResourceBundle properties = ResourceBundle.getBundle("MyExec");
于 2015-04-14T13:59:49.260 回答
0

您可以简单地将属性文件放在 META-INF 文件夹中。

+META-INF
 +properties_dir
  +Test.properties
于 2016-05-02T14:09:03.350 回答
0

对我有用的是在 jar 中添加属性文件并将该 jar 放在 MANIFEST 文件的类路径中(在 Class-Path 部分下)。

当我在 -cp 选项下传递同一个 jar 时,不知何故它不起作用。似乎它总是从 MANIFEST 文件中获取可运行 jar 的类路径。

于 2016-07-05T05:22:37.290 回答
0

我有更好的方法来解决这个问题

我的项目结构是:-你可以看到这个项目结构中没有属性文件

package com.main;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Run {

    public static void main(String[] args) throws IOException {
        Properties prop = new Properties();
        ClassLoader loader = Thread.currentThread().getContextClassLoader();           
        InputStream stream = loader.getResourceAsStream("config.properties");
        prop.load(stream);
        System.out.println(prop.getProperty("name"));

    }

}

现在将属性文件放在导出可运行 jar 文件的同一文件夹中。

对于这种方法,您不需要在 Eclipse 中创建属性文件,您只需创建一个属性文件,在其中导出可运行的 jar 并记住不要提供属性文件的路径,只写属性文件名这样

InputStream stream = loader.getResourceAsStream("config.properties");

于 2019-05-15T10:11:52.943 回答