调用CommandLineParser#parser时使用org.apache.commons.cli的java.lang.IllegalAccessError
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了调用CommandLineParser#parser时使用org.apache.commons.cli的java.lang.IllegalAccessError,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1504字,纯文字阅读大概需要3分钟。
内容图文
![调用CommandLineParser#parser时使用org.apache.commons.cli的java.lang.IllegalAccessError](/upload/InfoBanner/zyjiaocheng/827/9fafa8c8c5ca4a54bec46015b1e62e9b.jpg)
我正在尝试使用Apache Commons CLI库来解析Eclipse项目中的命令行选项,大致遵循其Usage Scenarios中的示例
我将commons-cli-1.3.1文件夹添加到Eclipse项目根目录中的lib文件夹中.
我把它添加到我的导入中:
import org.apache.commons.cli.*;
这是我的主要内容:
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.2(这对我有帮助)
>查看您的类路径并搜索另一个版本的commons-cli
你的异常信息到底意味着什么?
这意味着运行时的某些代码会尝试调用一些它无权调用的方法.例如,这可能是尝试调用私有方法.通常这是在编译期间捕获的.
但是,例如,如果您的代码尝试调用某个在1.3.1中公开但在1.2中是私有的函数.如果您再次编译1.3.1但尝试在类路径中使用1.2启动,则会出现这种错误.
希望很清楚.
内容总结
以上是互联网集市为您收集整理的调用CommandLineParser#parser时使用org.apache.commons.cli的java.lang.IllegalAccessError全部内容,希望文章能够帮你解决调用CommandLineParser#parser时使用org.apache.commons.cli的java.lang.IllegalAccessError所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。