[英]Add properties file to build path of runnable jar
是否可以將一些屬性文件添加到可運行的jar文件的類路徑中? 我嘗試了以下解決方案:
使用以下命令運行可執行文件:
java -cp ../prop_dir/prop1.properties;../prop_dir/prop2.properties -jar MyRunnableJar.jar
添加到清單文件中(在“類路徑”部分中)
../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.