gpt4 book ai didi

java.lang.IllegalAccessError 在调用 CommandLineParser#parser 时使用 org.apache.commons.cli

转载 作者:搜寻专家 更新时间:2023-10-31 19:53:52 32 4
gpt4 key购买 nike

我正在尝试使用 Apache Commons CLI 库来解析 Eclipse 项目中的命令行选项,大致遵循其 Usage Scenarios 中的示例。

我将 commons-cli-1.3.1 文件夹添加到 Eclipse 项目根目录中的 lib 文件夹。

我将其添加到我的导入中:

import org.apache.commons.cli.*;

这是我的 main 的顶部:

    Options options = new Options();
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
cmd = parser.parse( options, args);
} catch ( ParseException e1 ) {
System.err.println( "Unable to parse command-line options: "+e1.getMessage() );
e1.printStackTrace();
}

它编译没有错误,但是当它运行 parser.parse 调用时会产生这个错误:

Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.apache.commons.cli.Options.getOptionGroups()Ljava/util/Collection; from class org.apache.commons.cli.DefaultParser

此时我没有使用任何类加载器。

这个错误是什么意思?如何解决错误并解析参数?

最佳答案

这很可能是依赖性问题。

当您再次编译代码的一个版本的库(在您的情况下为 1.3.1),然后在您的类路径中运行该库的旧版本时,就会发生这种情况。

今天我遇到了这个问题,当时我依赖于 commons-cli-1.3.1,但是我的类路径中有 commons-cli-1.2(因为我使用 yarn jar 来启动我的应用程序)

你应该做什么?

  1. 您可以按照上面的建议尝试降级到 1.2(这对我有帮助)
  2. 检查您的类路径并搜索另一个版本的 commons-cli

您的异常消息的真正含义是什么?这意味着某些代码在运行时试图调用一些它无权调用的方法。例如,这可能是尝试调用私有(private)方法。通常这是在编译期间捕获的。

但是,例如,如果您的代码试图调用某些函数,该函数在 1.3.1 中是公共(public)的,但在 1.2 中是私有(private)的。如果您再次编译 1.3.1,但尝试在类路径中使用 1.2 启动,您将遇到此类错误。

希望它是清楚的。

关于java.lang.IllegalAccessError 在调用 CommandLineParser#parser 时使用 org.apache.commons.cli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32929193/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com