可以通过以下方式传递类的参数吗?
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/Option
和commons/cli/OptionBuilder
。
我必须这样做,因为指令是使用
运行程序java cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification
答案 0 :(得分:2)
我已使用commons-cli
选项-mode
进行了测试。它按预期编译和运行。所以我可以确定你可以使用该选项。
我站在
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而且我可能完全错了,但是通过在线快速研究,我认为该库为您提供构建执行命令的逻辑应用程序运行后的命令行。