我正在尝试将bacnet4j与JSF一起使用。
我在.java中构建了一个打开/关闭灯的应用程序,但如果我尝试从JSF页面调用相同的方法(与我的manage bean通信),请给我:
type Exception report
message
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: com/serotonin/bacnet4j/type/Encodable
root cause
java.lang.NoClassDefFoundError: com/serotonin/bacnet4j/type/Encodable
root cause
java.lang.ClassNotFoundException: com.serotonin.bacnet4j.type.Encodable
但是我很确定该类是否存在,因为如果不是我的java应用程序不起作用,对吧?
知道为什么会这样吗?
答案 0 :(得分:2)
包含此类的JAR文件应该放在webapp的/WEB-INF/lib
文件夹中。
普通Java应用程序不使用与Java Web应用程序相同的类路径。对于普通Java应用程序,类路径通常由-cp
命令中的-classpath
或java
参数指定,或者如果未指定,则由%CLASSPATH%
环境变量指定,或者如果是JAR,通过JAR Class-Path
中的/META-INF/MANIFEST.MF
条目。对于Java Web应用程序,类路径默认涵盖webapp的/WEB-INF/lib
和/WEB-INF/classes
文件夹和服务器的/lib
(以及更多)文件夹以及您可以在特定于服务器的配置中指定的任何自定义文件夹,例如,在Tomcat的情况下shared.loader
的{{1}}属性。
答案 1 :(得分:0)
NoClassDefFound表示该类在编译时可用,但在运行时不可用。您需要将jar文件与适当的类一起添加到war中(或将其添加到应用程序服务器类路径中)