0

WEB-INF\lib ディレクトリに jacob.jar があり、windows\system32 ディレクトリに jacob-1.16.1-x86.dll があります。

開発ボックスで問題なく動作します。生産機械では転倒します。Tomcat 7 を実行しています。ログには以下が含まれます。

java.lang.NoClassDefFoundError: Could not initialize class com.jacob.com.Dispatch

この行で:

Dispatch oCompy = new Dispatch("Compy.Connect")

助言がありますか?

編集: 提案に従って、私は jacob のソースを調べましたが、通常は利用できないライブラリを参照するインポートステートメントが見つかりません。ここにリストを含めます。私はJavaに比較的慣れていないので、何か足りないかもしれません:

jacob-1.16.1\src\com\jacob\activex\activexcomponent.java - import com.jacob.com.Dispatch;
jacob-1.16.1\src\com\jacob\activex\activexcomponent.java - import com.jacob.com.JacobObject;
jacob-1.16.1\src\com\jacob\activex\activexcomponent.java - import com.jacob.com.Variant;
jacob-1.16.1\src\com\jacob\activex\activexdispatchevents.java - import com.jacob.com.InvocationProxy;
jacob-1.16.1\src\com\jacob\activex\activexdispatchevents.java - import com.jacob.com.Dispatch;
jacob-1.16.1\src\com\jacob\activex\activexdispatchevents.java - import com.jacob.com.DispatchEvents;
jacob-1.16.1\src\com\jacob\activex\activexinvocationproxy.java - import com.jacob.com.Variant;
jacob-1.16.1\src\com\jacob\activex\activexinvocationproxy.java - import com.jacob.com.NotImplementedException;
jacob-1.16.1\src\com\jacob\activex\activexinvocationproxy.java - import java.lang.reflect.Method;
jacob-1.16.1\src\com\jacob\activex\activexinvocationproxy.java - import com.jacob.com.InvocationProxy;
jacob-1.16.1\src\com\jacob\activex\activexinvocationproxy.java - import java.lang.reflect.InvocationTargetException;
jacob-1.16.1\src\com\jacob\com\dateutilities.java - import java.util.Calendar;
jacob-1.16.1\src\com\jacob\com\dateutilities.java - import java.util.Date;
jacob-1.16.1\src\com\jacob\com\invocationproxyallvariants.java - import java.lang.reflect.InvocationTargetException;
jacob-1.16.1\src\com\jacob\com\invocationproxyallvariants.java - import java.lang.reflect.Method;
jacob-1.16.1\src\com\jacob\com\jacobreleaseinfo.java - import java.util.Properties;
jacob-1.16.1\src\com\jacob\com\jacobreleaseinfo.java - import java.io.InputStream;
jacob-1.16.1\src\com\jacob\com\jacobreleaseinfo.java - import java.io.IOException;
jacob-1.16.1\src\com\jacob\com\libraryloader.java - import java.util.Set;
jacob-1.16.1\src\com\jacob\com\libraryloader.java - import java.util.ResourceBundle;
jacob-1.16.1\src\com\jacob\com\libraryloader.java - import java.util.Locale;
jacob-1.16.1\src\com\jacob\com\libraryloader.java - import java.util.MissingResourceException;
jacob-1.16.1\src\com\jacob\com\libraryloader.java - import java.util.Enumeration;
jacob-1.16.1\src\com\jacob\com\libraryloader.java - import java.util.HashSet;
jacob-1.16.1\src\com\jacob\com\rot.java - import java.util.WeakHashMap;
jacob-1.16.1\src\com\jacob\com\rot.java - import java.util.Map;
jacob-1.16.1\src\com\jacob\com\rot.java - import java.util.Iterator;
jacob-1.16.1\src\com\jacob\com\rot.java - import java.util.HashMap;
jacob-1.16.1\src\com\jacob\com\variant.java - import java.util.Date;
jacob-1.16.1\src\com\jacob\com\variant.java - import java.math.BigInteger;
jacob-1.16.1\src\com\jacob\com\variant.java - import java.math.BigDecimal;
jacob-1.16.1\src\com\jacob\com\variantutilities.java - import java.util.Date;
jacob-1.16.1\src\com\jacob\com\variantutilities.java - import java.math.MathContext;
jacob-1.16.1\src\com\jacob\com\variantutilities.java - import java.math.BigDecimal;
jacob-1.16.1\src\com\jacob\com\variantutilities.java - import java.math.BigInteger;
jacob-1.16.1\src\com\jacob\com\variantutilities.java - import java.lang.reflect.Array;

編集:これが実際に答えであるかどうかはわかりません。

Web サイトの WEB-INF\lib ディレクトリを Tomcat のクラスパスに追加することで問題を解決しました。サイトにアクセスすると、Web サイトは自動的に WEB-INF\lib をクラスパスに含めると理解しているため、これは正しい答えではないと感じています。

問題をさらに混乱させるのは、サイトがそのディレクトリ内の他のライブラリにアクセスしても問題なく実行されていることです。

したがって、クラスパスに追加する必要があるのは、ライブラリの動作が不適切な場合の回避策です。回避策と正解はどれですか?? 私は質問を開いたままにすると思います。

4

1 に答える 1

1

このエラーは、クラスcom.jacob.com.Dispatchが別のクラスを使用していて、それが見つからないことを意味します。

クラスのソース コードがある場合は、それが使用するクラスを確認し、それらがクラスパスに含まれていることを確認します。

そうでない場合は、ドキュメントを見て、欠落しているクラスを含む jar を見つけて、それをクラスパスに追加してください。

于 2012-08-06T12:23:21.367 に答える