指定jar的类路径

时间:2011-05-24 11:23:19

标签: java jar classpath

我正在尝试配置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可以在其中找到属性文件的目录。

5 个答案:

答案 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文件是   所有用户类的来源,以及其他   用户类路径设置将被忽略。

来源: java - the Java application launcher

答案 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。