Не удается создать объект JexlEngine - PullRequest
1 голос
/ 26 ноября 2011

Я пишу следующий класс:

import org.apache.commons.jexl2.*;

public class NelderMead {
    // контсанты
    private static int      M = 3;
    private static double   E = 0.005;
    private static double   A = 1.000;
    private static double   B = 0.500;
    private static double   Y = 2.000;

    // переменные
    private JexlEngine jexl = new JexlEngine();
    private Expression func;
    private String funcString = "";
    private MapContext[] iterations;

    public NelderMead(){
        this.jexl = new JexlEngine();
    }

    public NelderMead(String funcString){
        this.jexl = new JexlEngine();
        this.setFunc(funcString);
    }


    public void setFunc(String funcString){
        this.funcString = funcString;
        this.func = this.jexl.createExpression(funcString);
    }

    public double funcEval(MapContext args){
        return (Double) this.func.evaluate(args);
    }

    public boolean checkCriterian(){
        return true;
    }
}

Но я создаю объект этого класса, у меня есть ошибка:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.apache.commons.jexl2.JexlEngine$UberspectHolder.<clinit>(JexlEngine.java:121)
    at org.apache.commons.jexl2.JexlEngine.getUberspect(JexlEngine.java:205)
    at org.apache.commons.jexl2.JexlEngine.<init>(JexlEngine.java:182)
    at org.apache.commons.jexl2.JexlEngine.<init>(JexlEngine.java:170)
    at NelderMead.<init>(NelderMead.java:22)
    at Test.main(Test.java:10)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 6 more

в первой строке конструктора (при создании объекта JexlEngine):

public NelderMead(String funcString){
    this.jexl = new JexlEngine();
    this.setFunc(funcString);
}

Не могли бы вы мне помочь - почему этот код вызывает ошибки?

PS Я использую файл .jar для использования этой библиотеки.

1 Ответ

1 голос
/ 26 ноября 2011

Вам нужно сделать регистрация общего доступа jar доступным в classpath во время выполнения

...