我在Visual代码中有一个奇怪的行为,试图用VSC调试器调试一个简单的代码--我有一个运行时错误,使用Gradle运行相同的代码--代码工作!
问题是在VSC调试模式下运行代码java代码试图加载两个库,即commons-cli-1.2.jar和新commons-cli-1.5.0.jar,在旧的库中有些方法没有实现,代码上升为java.lang.NoSuchMethodError。
[144.386s][info][class,load] java.lang.Throwable$WrappedPrintStream source: jrt:/java.base
java.lang.NoSuchMethodError: 'boolean org.apache.commons.cli.Options.hasShortOption(java.lang.String)'
at org.apache.commons.cli.DefaultParser.handleShortAndLongOption(DefaultParser.java:473)
at org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:542)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:712)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:679)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:660)
at it.fox.dafne.App.main(App.java:38)java代码是:
public static void main(String[] args) throws Exception {
Options options = new Options();
options.addOption("f", PROPERTY_FILE, true, "path to the properties file");
try {
var parser = new DefaultParser();
CommandLine commandLine = parser.parse(options, args);
String propertyFile = "";
...
...在ClassPath中,没有旧库的迹象:
<classpathentry sourcepath="/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.5.0/e7e198ff537780c2835e484b0ffccd2960074504/commons-cli-1.5.0-sources.jar" kind="lib" path="/Users/fox/.gradle/caches/modules-2/files-2.1/commons- cli/commons-cli/1.5.0/dc98be5d5390230684a092589d70ea76a147925c/commons-cli-1.5.0.jar">那么,Java如何才能找到旧版本呢?
Visual不应该使用classPath文件中的java .classpath?
启动JVM时启用-verbose:class,错误非常明显:
[7.861s][info][class,load] org.apache.commons.cli.Options source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.862s][info][class,load] org.apache.commons.cli.Option source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.864s][info][class,load] org.apache.commons.cli.OptionValidator source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.867s][info][class,load] org.apache.commons.cli.CommandLineParser source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.867s][info][class,load] org.apache.commons.cli.DefaultParser source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.5.0/dc98be5d5390230684a092589d70ea76a147925c/commons-cli-1.5.0.jar
[7.868s][info][class,load] org.apache.commons.cli.ParseException source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.868s][info][class,load] org.apache.commons.cli.MissingArgumentException source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.869s][info][class,load] org.apache.commons.cli.MissingOptionException source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.870s][info][class,load] org.apache.commons.cli.UnrecognizedOptionException source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.870s][info][class,load] org.apache.commons.cli.AmbiguousOptionException source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.5.0/dc98be5d5390230684a092589d70ea76a147925c/commons-cli-1.5.0.jar
[7.871s][info][class,load] org.apache.commons.cli.CommandLine source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar
[7.872s][info][class,load] org.apache.commons.cli.Util source: file:/Users/fox/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.2/2bf96b7aa8b611c177d329452af1dc933e14501c/commons-cli-1.2.jar在Gradle中,依赖关系很好:
MacBook-Pro:plcProject fox$ gradle dafne:dependencies | grep commons-cli
| | | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
+--- commons-cli:commons-cli:1.5.0
+--- commons-cli:commons-cli:1.5.0 (n)
+--- commons-cli:commons-cli:1.5.0 (n)
| +--- commons-cli:commons-cli:1.5.0
| | | | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
+--- commons-cli:commons-cli:1.5.0
| | | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
+--- commons-cli:commons-cli:1.5.0
| +--- commons-cli:commons-cli:1.5.0
| | | | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
| | | | +--- commons-cli:commons-cli:1.2 -> 1.5.0
+--- commons-cli:commons-cli:1.5.0Gradle找到一些传递的依赖项,但决定使用新版本的库,而不是旧版本的:
所以问题是:
谢谢,
S.
发布于 2022-02-13 15:24:57
代码似乎没问题。
这个问题解决了清理Visual代码缓存中可能有问题的地方。要清除缓存,您必须使用“命令调色板”(⇧⌘P,F1 on Mac;Ctrl+Shift+P,F1 on Windows),并使用以下命令:" Java :洁净Java语言工作区“
https://stackoverflow.com/questions/71016201
复制相似问题