Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoClassDefFoundError: Tomcat 7 unable to load classes from jar

Somewhat of a beginner question, but searching unfortunately did not help me. I have created a simple class in java that simulates a dieroll, as seen below:

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;
    }

}

The reason it's packaged in "java" is due to maven. Dice.class is contained in Game-0.1-SNAPSHOT.jar in the WEB-INF/lib directory.

I am trying to use Dice in the following jsp:

<H1>Test</H1>
<%= java.com.game.util.Dice.rollOne() %>

This is the Error that occurs:

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)

What am I doing wrong?

like image 438
user2456872 Avatar asked Dec 29 '25 11:12

user2456872


1 Answers

This is expected Tomcat 7 behavior. Some packaged are restricted by Tomcat. The list of packaged/class which cannot be load you can find at

$CATALINA_BASE/conf/catalina.properties

There is java. pattern.

like image 89
michal Avatar answered Dec 31 '25 01:12

michal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!