可执行jar背后的魔力?

pro*_*eek 1 java jar

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?我怎么知道应该叫的名字?
  • 这两种方法有什么区别?优点和缺点?

Sta*_*key 5

•这种方法背后的魔力是什么?什么是'clojure.lang.Script'?

clojure.lang.Script是具有jar可执行文件正在运行的main方法的类.

•可以用相同的方式调用antlr吗?如果是这样的话应该使用什么名字(比如clojure.lang.Script)?

antlr jar可以用同样的方式调用.您必须知道主类的名称(位于jar中的MANIFEST.MF文件中.)

•用其他语言制作的jar文件怎么样:clojure/scala?我怎么知道应该叫的名字?

我不知道......可能取决于语言.

•这两种方法有什么区别?优点和缺点?

可执行的jar非常容易用户启动(特别是在Windows中).只需双击jar文件即可.

•在这篇文章中,我被告知-jar忽略所有-cp和$ CLASSPATH.为什么是这样?这有什么理由吗?

毫无疑问,Sun出于安全原因这样做了.

•我还被告知-cp选项也忽略了$ CLASSPATH.为什么是这样?这有什么好的理由吗?

-cp选项会覆盖$ CLASSPATH.这就是这个选项的全部目的.