1

JDBI を使用して自分のコンピューターでローカルにプロジェクトを作成しましたが、問題なくデータベースと連携します。

現在、Tomcat サーバーで同じプロジェクトを使用しています。javac -cp "lib/*" cs5530/*.javalib には、jdbi-2.49.jar などの依存している外部 jar が含まれている場所を使用して、コードをコンパイルしています。

このコードは、新しい DBI を作成する場所です。

public static DAO getDbConnection() {
    MysqlDataSource ds = new MysqlDataSource();
    ds.setServerName("server");
    ds.setUser("user");
    ds.setPassword("password");
    ds.setDatabaseName("dbName");
    DBI dbi = new DBI(ds);
    return dbi.onDemand(DAO.class);
}

それは私のクラスコンストラクターで呼び出されました:

public Customer() {
    this.conn = getDbConnection();
}

これは私が得るエラーです:

java.lang.NoClassDefFoundError: org/skife/jdbi/v2/DBI
    cs5530.Customer.getDbConnection(Customer.java:85)
    cs5530.Customer.<init>(Customer.java:31)
    org.apache.jsp._1_jsp._jspService(_1_jsp.java:105)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

では、必要なクラスを確認して正常にコンパイルし、実行時に中断するのはなぜですか?どうすればこれを修正できますか?

ありがとう。

4

1 に答える 1

0

NoClassDefFoundError は、JVM がそのクラスパスで一致するクラスを見つけられない場合に発生します。jdbi ライブラリが見つかりません。コンパイル時に javac にライブラリの場所を明示的に伝えますが、実行時に Tomcat がライブラリを見つけられるようにする必要があります。

通常、Tomcat は、アプリケーション jar が下に移動するように、webapps フォルダーの下に個別の Web アプリケーションとして編成された Java コードを見つけることを期待しています。

 $CATALINA_HOME/webapps/whateveryourwebappnameis/WEB-INF/lib

アプリケーションのクラスファイルは

 $CATALINA_HOME/webapps/whateveryourwebappnameis/WEB-INF/classes

public_html は、Java クラス ファイルを配置するのに奇妙な場所のように思えます。ただし、それ以外の場合は、lib フォルダーを WEB-INF の直下に移動します。

于 2014-04-02T20:17:02.757 に答える