我正在尝试配置JAR的类路径,以便我的ResourceBundle可以从中获取属性文件。
如果我从.class文件运行它并指定-cp
标志它可以正常工作,System.err.println(System.getProperty("java.class.path"));
将打印-cp
标志中指定的路径。
如果我尝试为它创建一个jar文件,System.err.println(System.getProperty("java.class.path"));
总是打印jar文件的路径,并且不会拾取属性文件。
看起来如果你将它作为jar文件运行,你就不能指定-cp
标志(这是我所希望的,因为切换正在使用的属性文件是很常见的)。我已经尝试在jar清单中指定它,但它仍然无效。
以下是来自测试jar的代码和清单,似乎不起作用:
public final class Test {
public static void main(final String[] args) {
System.err.println(System.getProperty("java.class.path"));
}
}
Manifest-Version: 1.0
Created-By: 1.6.0_20 (Sun Microsystems Inc.)
Main-Class: Test
Class-Path: /home/ajanuary/Projects/test/
修改的 最初的路径是没有意义的,所以我改变了它。我想指向一个ResourceBundle可以在其中找到属性文件的目录。
答案 0 :(得分:5)
如果使用-jar,则忽略-cp:
<强> -jar 强>
执行封装在JAR文件中的程序。第一个参数是 JAR文件的名称而不是 启动类名称。为了这个 工作的选择,清单 JAR文件必须包含一行 form Main-Class:classname。这里, classname标识具有的类 用作您的public static void main(String[] args)
方法 应用程序的起点。见 Jar工具参考页面和Jar Java教程的踪迹 有关使用Jar的信息 文件和Jar文件清单。 当你 使用此选项,JAR文件是 所有用户类的来源,以及其他 用户类路径设置将被忽略。
答案 1 :(得分:2)
我会在我的Java应用程序中读取一个属性(该属性可以指示应该从哪里加载资源)。
如何执行应用程序的示例将是:
java -Dkey=value -jar application.jar
答案 2 :(得分:1)
您不能在清单中使用classpath通配符。
有关类路径如何工作的更多信息,请查看Setting the classpath:
类路径通配符不受尊重 在Class-Path jar-manifest标题中。
答案 3 :(得分:1)
是的,对于shell,〜表示$ HOME,但对于java,它并不意味着什么。
答案 4 :(得分:0)
问题是我还有一个索引文件。如果您有索引文件,则将忽略Class-Path。