在命令行java

时间:2017-07-19 21:57:13

标签: java jar executable-jar

可以通过以下方式传递类的参数吗?

java cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification

这里,cs123是不同java文件及其编译版本所在的包。我已经使用以下命令

编译了.java个文件
javac -cp commons-cli-1.2.jar cs123\*.java

为了清楚起见,.java和.jar文件的结构是

lib
|--cs362
|    |--all the java files including Learn.java
|--commons-cli-1.2.jar

我正在从lib文件夹运行命令提示符。令我担心的是,从java文档和其他来源传递参数的格式只是一个字符串数组,对于选项,它也可以从java文档中看到。使用上面的运行时java执行,我得到了

java.lang.ClassNotFoundException: org.apache.commons.cli.OptionBuilder

但如果我执行,

java -cp commons-cli-1.2.jar cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification

我收到以下错误

Unrecognized option: -mode
Error: Could not create the Java Virtual Machine
Error: A fatal exception has occured. Program will exit.

我理解java尝试将与其关联的-作为预定义选项关联,-mode不是它识别的选项。但与此同时,.jar文件就可以完成它的工作。出于研究目的,commons-cli-1.2.jar文件与多种方法相关联,其中两种方法为commons/cli/Optioncommons/cli/OptionBuilder

我必须这样做,因为指令是使用

运行程序
java cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification

2 个答案:

答案 0 :(得分:2)

我已使用commons-cli选项-mode进行了测试。它按预期编译和运行。所以我可以确定你可以使用该选项。 enter image description here 我站在java文件夹中运行命令,我的文件夹结构:

java
|--upwork
|    |--Main.java
|--commos-cli-1.2.jar

对于你的问题:我看到你的命令只将classpath指向commons-cli lib,而不是指向你的包的位置。请参阅this answer您的命令应该以:java -cp .;commons-cli-1.2.jar ...

开头

如果这没有帮助,请上传您的代码以获取帮助,或者您可以像我一样创建一个简单的测试来检查这一点。

答案 1 :(得分:0)

  

可以通过以下方式传递类的参数吗?

我不这么认为是因为你正试图通过你的" -naming"是程序参数。使用main的 String [] args 在您的应用程序中检索程序参数,在Java中,您不会在数组中使用String索引。

如果你想达到你想要的效果,你仍然可以做到,但你必须在你的程序中实现逻辑。首先,您需要获取程序中的所有参数,然后通过构建地图来实现逻辑并处理此映射。 例如,你可以说如果任何参数(即args [0])以" - "开头。这意味着它是你的地图的一个关键,以下参数(即args [1])是相关的值。

编辑:我还没有使用过commons-cli而且我可能完全错了,但是通过在线快速研究,我认为该库为您提供构建执行命令的逻辑应用程序运行后的命令行。