代码之家  ›  专栏  ›  技术社区  ›  prosseek

可执行jar背后的魔力?

  •  1
  • prosseek  · 技术社区  · 14 年前

    JAR是一种使用Java的便捷方法,因为每个类都可以包含在一个JAR中。

    我使用antlr如下,它使用-jar选项调用jar。

    java -jar $ANTLRDIR/antlr-3.2.jar ANTLR_CODE.g
    

    这是一个叫做clojure的命令。而不是使用-jar选项调用clojure.jar。它在-cp中,并调用一些“函数”。

    java -cp $CLOJURE_JAR:$CLASSPATH clojure.lang.Script CLOJURE_CODE.clj
    

    问题

    • 这种方法背后的魔力是什么?什么是“clojure.lang.script”?
    • 可以用同样的方法调用Antlr吗?如果是这样的话,应该使用什么名字(比如clojure.lang.script)?
    • 用其他语言生成的jar文件如何:clojure/scala?我怎么知道该叫什么名字?
    • 这两种方法有什么区别?利弊?
    1 回复  |  直到 14 年前
        1
  •  5
  •   Starkey    14 年前

    这个方法背后的魔力是什么?什么是“clojure.lang.script”?

    script是JAR可执行文件正在运行的主方法的类。

    _窆可以用同样的方式调用Antlr吗?如果是这样的话,应该使用什么名字(比如clojure.lang.script)?

    可以用同样的方法调用antlr jar。您必须知道主类的名称(在jar的manifest.mf文件中)。

    _窆:用其他语言制作的jar文件如何:clojure/scala?我怎么知道该叫什么名字?

    我不知道…可能取决于语言。

    这两种方法有什么区别?利弊?

    可执行JAR对于用户来说非常容易启动(特别是在Windows中)。只需双击jar文件。

    在本文中,我被告知-jar忽略了所有的-cp和$classpath。为什么会这样?这有什么原因吗?

    毫无疑问,太阳人这样做是出于安全考虑。

    还有人告诉我-cp选项也忽略了$classpath。为什么会这样?有什么好的理由吗?

    -cp选项覆盖$classpath。这就是这个选择的全部目的。