scala jar文件由java执行 - cp与jar

时间:2013-03-06 10:55:03

标签: java scala jar

如果我跑:

java -jar corpus-tools-0.0.2.jar removeTSfromCorpus

它给了我错误:

Failed to parse the trailing argument list: 'removeTSfromCorpus'

但是,如果我跑:

java -cp corpus-tools-0.0.2.jar removeTSfromCorpus

它无缝地工作。 scala-library包含在依赖项中(MANIFEST)。 -cp和-jar有什么区别?我认为在这种情况下应该是平等的

谢谢!

3 个答案:

答案 0 :(得分:5)

java -cp jarfile classname

使用指定的类路径(-cp)执行classname。您可以简单地依靠-cp变量来确定CLASSPATH找到类的位置,而不是使用java选项。

java -jar jarfile

将使用指定的.jar文件并执行Main-Class文件MANIFEST中定义的.jar。这是java与独立应用程序的近似值。该应用程序打包在.jar文件中,MANIFEST指定该.jar文件中的入口点。有关详细信息,请参阅here

所以(回答你原来的问题!)你的第一个例子将运行MANIFEST中指定的类,并试图以某种方式将removeTSFromCorpus解释为命令行参数。第二个示例将CLASSPATH设置为.jar文件,然后作为类运行removeTSFromCorpus

答案 1 :(得分:2)

运行JAR时,应在MANIFEST.MF文件中指定主类和类路径。

然后你就像运行它一样:

java -jar corpus-tools-0.0.2.jar

见:

http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

提取

  

如果您的应用程序捆绑在JAR文件中,则需要一些方法   指示JAR文件中的哪个类是您的应用程序的条目   点。您提供此信息与主要类头   清单,具有一般形式:

     

Main-Class:classname

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

提取:

  

指定要包含在Class中的Class-Path头字段中的类   applet或应用程序的清单文件。 Class-Path标头占用   以下表格:

     

Class-Path:jar1-name jar2-name directory-name / jar3-name

答案 2 :(得分:1)

-jar选项试图从jar文件中定义的主类执行static main方法,然后为其提供参数removeTSfromCorpus

-cp选项认为您正在提供类路径,然后尝试从main类运行removeTSFromCorpus方法。