到目前为止,我已经下载了Apache Commons library
并提取了库
commons-lang3-3.8.1.jar
中的Java\jdk1.8.0_172\jre\lib\ext
。
现在,我创建了一个具有两个字段的类,并且我想使用两个对象进行比较
ob1.equals(ob2)。方法equals
和hashCode
已被覆盖,并且在运行时遇到的错误是Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/builder/EqualsBuilder
。
import java.util.*;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.EqualsBuilder;
class key{
int end;
LinkedList<Integer> via = new LinkedList<>();
key(int x,LinkedList<Integer> ob){
this.end = x;
this.via = ob;
}
@Override
public int hashCode(){
return new HashCodeBuilder().append(end).append(via).toHashCode();
}
@Override
public boolean equals(Object obj)
{
if(!(obj instanceof key))
return false;
if(this==obj)
return true;
key o=(key)obj;
return new EqualsBuilder().append(end,o.end).append(via,o.via).isEquals();
}
}
class main{
public static void main(String[] args)
{
key ob1 = new key(12,new LinkedList<Integer>(Arrays.asList(1,2,3)));
key ob2 = new key(12,new LinkedList<Integer>(Arrays.asList(1,2,3)));
System.out.println(ob1.equals(ob2)); //expecting true
}
}
以下是错误的详细信息。
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/lang3/builder/EqualsBuilder
at key.equals(test.java:29)
at main.main(test.java:43)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.builder.EqualsBuilder
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
我已经面对这个问题很长时间了。我已经检查了所有的类文件,并且非常确定库是否已正确加载,但是我不知道为什么在NoClassDefFoundError
处会得到runtime
。
答案 0 :(得分:0)
您将罐子放置在正确的function enableCursor() {
var seleniumFollowerImg = document.createElement("img");
seleniumFollowerImg.setAttribute('src', 'data:image/png;base64,'
+ 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAQAAACGG/bgAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA'
+ 'HsYAAB7GAZEt8iwAAAAHdElNRQfgAwgMIwdxU/i7AAABZklEQVQ4y43TsU4UURSH8W+XmYwkS2I0'
+ '9CRKpKGhsvIJjG9giQmliHFZlkUIGnEF7KTiCagpsYHWhoTQaiUUxLixYZb5KAAZZhbunu7O/PKf'
+ 'e+fcA+/pqwb4DuximEqXhT4iI8dMpBWEsWsuGYdpZFttiLSSgTvhZ1W/SvfO1CvYdV1kPghV68a3'
+ '0zzUWZH5pBqEui7dnqlFmLoq0gxC1XfGZdoLal2kea8ahLoqKXNAJQBT2yJzwUTVt0bS6ANqy1ga'
+ 'VCEq/oVTtjji4hQVhhnlYBH4WIJV9vlkXLm+10R8oJb79Jl1j9UdazJRGpkrmNkSF9SOz2T71s7M'
+ 'SIfD2lmmfjGSRz3hK8l4w1P+bah/HJLN0sys2JSMZQB+jKo6KSc8vLlLn5ikzF4268Wg2+pPOWW6'
+ 'ONcpr3PrXy9VfS473M/D7H+TLmrqsXtOGctvxvMv2oVNP+Av0uHbzbxyJaywyUjx8TlnPY2YxqkD'
+ 'dAAAAABJRU5ErkJggg==');
seleniumFollowerImg.setAttribute('id', 'selenium_mouse_follower');
seleniumFollowerImg.setAttribute('style', 'position: absolute; z-index: 99999999999; pointer-events: none; left:0; top:0');
document.body.appendChild(seleniumFollowerImg);
document.onmousemove = function (e) {
document.getElementById("selenium_mouse_follower").style.left = e.pageX;
document.getElementById("selenium_mouse_follower").style.top = e.pageY;
};
};
enableCursor();
相对路径中...但是只有当您运行的jre\lib\ext
命令来自相同{{1 }}进行更改的路径。
如果您在扩展目录中复制了正确的jar,但是却遇到此异常,则很可能意味着在运行程序时,您不会在进行更改的JRE上使用JRE,而是在另一个地方进行了。
来自java
env变量的jre\bin
命令很可能没有引用您扩展的JRE。您可以在外壳程序中显示jre
进行检查。
因此,可以将java
设置为扩展的JRE的java home路径,也可以通过指定诸如PATH
之类的绝对路径来运行PATH
命令。
它应该(不必说必须)起作用。
答案 1 :(得分:0)
花了几个小时解决这个问题后,我终于通过设置CLASSPATH
变量来解决了这个问题。
我尝试使用-cp
命令,但不幸的是这对我不起作用。如果我们明确地执行此操作,则无需向Java编译器和Java解释器提供“ -cp”或“ -classpath”开关值,因为它们已经知道更新的类路径。
在Windows计算机上,我通过以下方式设置了CLASSPATH
变量:
set CLASSPATH=/coding @October\lib\commons-lang3-3.8.1.jar;.
当前,我位于coding @October
目录中。 commons-lang3-3.8.1.jar
文件位于coding @October\lib
目录中。myapp.java
文件位于coding @October
目录中。
设置类路径后,我可以然后通过编译并执行myapp.java
直接javac myapp.java
命令,然后java myapp
执行脚本。