簡體   English   中英

添加屬性文件以構建可運行jar的路徑

[英]Add properties file to build path of runnable jar

是否可以將一些屬性文件添加到可運行的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

為了解決此問題,我使用了一種解決方法:我運行主類,而不是運行可運行的jar,然后將jar添加到類路徑中。

我使用的命令如下:

java -classpath .;MyRunnableJar.jar;prop_dir; my.package.MyClass

清單中的prop_dir/prop1.properties prop_dir/prop1.properties應該是這樣嗎?

還要簽出這個問題: Java -jar:訪問外部配置文件

您必須在類文件中相對於.jar文件位置引用.properties文件。 Windows(分號)和Unix環境(冒號)的類路徑分隔符不同。

對於窗戶

java -classpath。; prop_dir; -jar Runnable.jar(在您的Class文件中,相對URl應該從類路徑中說“ prop_dir / prop1.properties”來訪問屬性文件)

對於Unix env

java -classpath。:prop_dir:-jar Runnable.jar(在您的Class文件中,應該由相對URl從類路徑中訪問屬性文件,說“ prop_dir / prop1.properties”)

碼:

在此處輸入圖片說明

輸出:

在此處輸入圖片說明

添加一個。 到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");

您可以簡單地將屬性文件放在META-INF文件夾中。

+META-INF
 +properties_dir
  +Test.properties

對我有用的是在jar中添加屬性文件,並將該jar放在MANIFEST文件中的類路徑中(在Class-Path部分下)。

當我在-cp選項下傳遞相同的jar時,它不起作用。 似乎它總是從MANIFEST文件中獲取可運行jar的類路徑。

我有一個更好的方法來解決這個問題

我的項目結構是:- 您可以看到此項目結構中沒有屬性文件

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM