造成原因:java.lang.ClassNotFoundException:org.apache.commons.lang3.builder.EqualsBuilder

时间:2018-10-05 15:39:16

标签: java apache exception

到目前为止,我已经下载了Apache Commons library并提取了库
 commons-lang3-3.8.1.jar中的Java\jdk1.8.0_172\jre\lib\ext

现在,我创建了一个具有两个字段的类,并且我想使用两个对象进行比较 ob1.equals(ob2)。方法equalshashCode已被覆盖,并且在运行时遇到的错误是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

2 个答案:

答案 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目录中。

enter image description here

设置类路径后,我可以然后通过编译并执行myapp.java 直接javac myapp.java命令,然后java myapp执行脚本。