在Jenkins插件中执行一些Java代码,我得到以下结果:
Caused by: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;II)V
at de.dwpbank.build.jenkins.plugins.templateutility.auxconfig.ConfigHarvester.extract(ConfigHarvester.java:123)
我想知道如何完全理解NoSuchMethodError消息:
checkArgument(ZLjava/lang/String;II)V
我得到的是,我调用了checkArgument方法,其中至少有一个字符串作为参数,L是指针的大小(长-不是吗?)但是Z,分号后的II和V代表什么?
以下是取消检查参数:
int maxBoundary = configDescriptorTree.getMaxBoundary();
int size = auxArray.length;
Preconditions.checkArgument(maxBoundary >= size,
"AuxInstance Array size '%s' > maxBoundary '%s'", size,
maxBoundary);
因此,此调用将与checkArgument的以下签名匹配:
public static void checkArgument(boolean b, @Nullable String errorMessageTemplate, int p1, int p2)
通过自动装箱,它也可以与此匹配:
checkArgument(boolean b, @Nullable String errorMessageTemplate, @Nullable Object p1, @Nullable Object p2)
或者这个:
public static void checkArgument(boolean expression, @Nullable String errorMessageTemplate, @Nullable Object... errorMessageArgs)
这种模糊性可能是NoSuchMethodError的原因吗?
com.google.common.base.Preconditions.checkArgument(1 >= 2,
"AuxInstance Array size '%s' > maxBoundary '%s'", 2,
1);
java.lang.IllegalArgumentException: AuxInstance Array size '2' > maxBoundary '1'