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都可以在这里找到:

http://commons.apache.org/scxml/dependencies.html

Interesting Posts