繁体   English   中英

从类路径读取属性文件(非 Maven)

[英]Read properties file from classpath (non-maven)

当我尝试从另一个目录运行我的 jar 时,它看不到其中包含“url.properties”文件的“config”文件夹。

在 MyProperties class 里面我有以下代码,当从同一个目录运行时它运行完美

Properties properties = new Properties();
FileInputStream in = new FileInputStream("./config/url.properties");
properties.load(new InputStreamReader(in, Charset.forName("UTF-8")));
in.close();

包含此代码的 class 位于以下树中:

myproject\MyAppClass.class
myproject\data\MyProperties.class

如果我运行包含上述代码的 jar,它运行良好:

C:\myjarfolder\>java -jar myApp.jar

但它没有在“config”中找到“url.properties”,如果我这样做,则会返回错误:

C:\>java -jar c:\myjarfolder\myApp.jar

显然这似乎是一个类路径问题,所以我尝试以下但没有成功并返回相同的“找不到文件”错误:

C:\> java -cp "c:\myjarfolder\*;c:\myjarfolder\config" myproject.MyAppClass
C:\> java -cp "c:\myjarfolder\*;c:\myjarfolder\config\" myproject.MyAppClass
C:\> java -cp "c:\myjarfolder\*;config" myproject.MyAppClass
C:\> java -cp "c:\myjarfolder\*;config\" myproject.MyAppClass
C:\> java -cp "c:\myjarfolder\*;\config\" myproject.MyAppClass
C:\> java -cp "c:\myjarfolder\*;c:\myjarfolder\config\url.properties" myproject.MyAppClass 

以及许多其他带有和不带引号的变体,都没有成功。


然后我认为这可能是加载资源问题并尝试更改 InputStream(它在 static 方法中):

Properties properties = new Properties();
properties.load(MyProperties.class.getClassLoader().getResourceAsStream("./config/url.properties"));

and then

properties.load(MyProperties.class.getClassLoader().getResourceAsStream("config/url.properties"));

这样即使在同一个文件夹中运行它也不起作用。


我还尝试将配置文件夹放在类路径中:清单内。 没用。


我尝试了很多我在堆栈上找到的东西,但似乎都没有。

有没有办法让第一个选项(没有 getresources)从另一个目录运行?

如果我以某种方式从 getResource 加载它,如果我引用 class 路径,它会从另一个目录运行吗?

当使用像 FileInputStream("./config/url.properties") 这样的绝对位置时:

在 jar 中添加配置文件夹。 从 IDE 您可以将其添加为源代码,它将自动编译 jar 内的文件夹。 然后它可以在另一个文件夹中使用“java -jar c:\myjarfolder\myJar.jar”运行没问题。


使用 getResources("url.properties") 时:

这里不能使用绝对位置否则会出现和之前一样的问题,所以要让jar之外的文件夹添加到classpath中(如果没有添加到运行参数classpath或者清单)。 该文件夹可以通过运行它来添加:
'java -cp "c:\myjarfolder*;c:\myjarfolder\config" myproject.MyAppClass'

此外,它可以添加到 MANIFEST.MF 类路径中,例如“class-path: config/”。 (它只在此处使用“/”)并且可以使用“java -jar c:\myjarfolder\myJar.jar”运行。


我不认为这是人们会遇到的正常问题,因为通常您从相同的位置运行 jar。 但是我们正在创建一个 RDP 以从无法自行运行 jar 但使用 java.exe 的服务器运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM