在命令行java中传递此类中main方法参数的正确方法

在命令行java中传递此类中main方法参数的正确方法,java,jar,executable-jar,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文

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

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
类的参数可以通过以下方式传递吗

java cs123.Learn -mode train -algorithm even_odd -model_file speech.even_odd.model -data speech.train -task classification
我不这么认为,因为您试图通过“-命名”传递的是程序参数。程序参数在应用程序中使用main的字符串[]args进行检索,而在Java中,数组中没有字符串索引

如果您想实现您想要的,您仍然可以这样做,但您必须在您的程序中实现逻辑。首先,您需要获取程序中的所有参数,然后通过构建一个映射来实现逻辑,并处理这个映射。 例如,您可以说,如果任何参数(即args[0])以“-”开头,则表示它是映射的键,并且以下参数(即args[1])是关联的值


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

我使用
commons cli
-mode
in选项进行了测试。它按预期编译和运行。因此,我可以向您保证,您可以使用该选项。 我站在
java
文件夹中运行命令,我的文件夹结构:

java
|--upwork
|    |--Main.java
|--commos-cli-1.2.jar
对于您的问题:我看到您的命令只指向
commons cli
lib的类路径,而没有指向您的包的位置。请参阅,您的命令应以:
java-cp开头。;commons-cli-1.2.jar…


如果这没有帮助,请上传代码以获得帮助,或者您可以创建一个类似我的简单测试来检查此问题。

commons-cli-1.2.jar文件正用于此目的。它具有名为Option和OptionBuilder的类,能够以给定格式解析命令行。事实上,以这种方式传递论据对我来说也是新鲜事。我必须这样运行程序,因为主类已经实现了。我只需要包含一些代码就可以实现一个机器学习算法。我没有编写代码来解析命令行。你能告诉我执行java命令的方法是否正确吗?我说的是java-cp commons-cli-1.2.jar cs123.Learn-mode train-algorithm偶数-奇数-model-file speech.偶数-奇数-model-data speech.train-任务分类在这种情况下,我可能还需要了解一些其他依赖项。您调用了所需的库,然后调用了类和参数,所以看起来还可以。一个假设是,通过使用commons cli,您的程序参数将被解释为与您在程序中对lib的使用相匹配:我认为您的代码可能比您的cli命令更适合。