繁体   English   中英

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

[英]scala jar file executed by java - cp vs. 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有什么区别? 我认为在这种情况下应该是平等的

谢谢!

java -cp jarfile classname

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

java -jar jarfile

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

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

运行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标头提供此信息,该标头具有以下一般形式:

Main-Class:classname

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

提取:

您可以指定要包含在applet或应用程序的清单文件中的Class-Path头字段中的类。 Class-Path标头采用以下形式:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM