2

如果我运行:

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 包含在依赖项(清单)中。-cp 和 -jar 有什么区别?我认为在这种情况下应该是平等的

谢谢!

4

3 回答 3

5
java -cp jarfile classname

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

java -jar jarfile

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

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

于 2013-03-06T10:56:30.717 回答
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 标头提供此信息,该标头具有一般形式:

主类:类名

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

提炼:

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

类路径:jar1-name jar2-name directory-name/jar3-name

于 2013-03-06T10:56:29.810 回答
1

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

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

于 2013-03-06T10:58:48.310 回答