Apache Commons SCXML – 找不到JexlContext
我是SCXML的新手,即使是最简单的应用也无法启动。 当我尝试启动它时,我得到以下exception。 但我在classpath上有类commons-scxml-0.9.jar
和该类。 有任何想法吗?
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/jexl/JexlContext at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 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) at org.apache.commons.scxml.env.AbstractStateMachine.(AbstractStateMachine.java:103) at main.StateMachineImpl.(StateMachineImpl.java:8) at main.Main.main(Main.java:6) Caused by: java.lang.ClassNotFoundException: org.apache.commons.jexl.JexlContext 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) ... 15 more
这是代码:
Main class
public class Main { public static void main(String[] args) { StateMachineImpl stateMachineImpl = new StateMachineImpl(); stateMachineImpl.fireEvent(Event.START.getEvent()); stateMachineImpl.fireEvent(Event.STOP.getEvent()); } }
Event
public enum Event { START("event.start"), STOP("event.stop"); private String event; private Event(String event) { this.event = event; } public String getEvent() { return event; } public void setEvent(String event) { this.event = event; } }
StateMachineImpl
public class StateMachineImpl extends AbstractStateMachine { public StateMachineImpl() { super(StateMachineImpl.class.getClassLoader().getResource("state-machine-cfg.xml")); } public void off() { System.out.println("StateMachine is OFF"); } public void running() { System.out.println("StateMachine is RUNNING"); } }
state-machine-cfg.xml
编辑 – 解决方案:我必须添加其他依赖项(我认为它们将由Maven自动加载)。
pom.xml dependencies
commons-scxml commons-scxml 0.9 commons-logging commons-logging 1.1.1 commons-jexl commons-jexl 1.1 xalan xalan 2.7.1
将commons-jexl.jar
添加到CLASSPATH中。 根据0.9版中的项目pom.xml
,您还需要(不包括传递性依赖):
-
commons-logging
-
commons-digester
-
commons-beanutils
-
commons-el
所有SCXML依赖关系jar都可以在这里找到: