[英]NoClassDefFoundError: Tomcat 7 unable to load classes from jar
有点像初学者的问题,但不幸的是,搜索并没有帮助我。 我在java中创建了一个模拟dieroll的简单类,如下所示:
package java.com.game.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Dice {
private static Random randomGenerator = new Random();
public static int rollOne(){
return randomGenerator.nextInt(6)+1;
}
public static List<Integer> roll(int amountOfDice){
List<Integer> rolls = new ArrayList<Integer>();
for (int i = amountOfDice ; i > 0; i--){
rolls.add(rollOne());
}
return rolls;
}
}
它在“java”中打包的原因是由于maven。 Dice.class包含在WEB-INF / lib目录中的Game-0.1-SNAPSHOT.jar中。
我想在下面的jsp中使用Dice:
<H1>Test</H1>
<%= java.com.game.util.Dice.rollOne() %>
这是发生的错误:
org.apache.jasper.JasperException: An exception occurred processing JSP page /game/index.jsp at line 2
1: <H1>Some Heading</H1>
2: <%= java.com.game.util.Dice.rollOne() %>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause
javax.servlet.ServletException: java.lang.NoClassDefFoundError: java/com/game/util/Dice
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
org.apache.jsp.game.index_jsp._jspService(index_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause
java.lang.NoClassDefFoundError: java/com/game/util/Dice
org.apache.jsp.game.index_jsp._jspService(index_jsp.java:63)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
我究竟做错了什么?
这是Tomcat 7的预期行为。 一些打包受Tomcat限制。 你可以找到无法加载的打包/类列表
$ CATALINA_BASE / conf目录/ catalina.properties
有java.
图案。
可能是Tomcat拒绝从包java。*加载应用程序类。
将课程移至另一个包,然后重试。
这里有两个问题。
src / main / java是Maven中Java源文件的默认文件夹。 包文件夹(classpath)从java文件夹开始。 war插件将已编译的类/包放在WEB-INF / classes文件夹下。
从Java语言规范开始,java和javax包是保留的,不应该用于常规类。 此外,正如michal观察到的那样,Tomcat不会加载某些类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.