次の問題があります。TomcatにJNLPと実行可能JARファイルをデプロイしました。JNLPファイルはJARファイルを自動的にダウンロードして実行する必要があります。JARファイルは署名および検証されます。これが行われます(ダウンロード部分)。ただし、JARメインクラス(JNLPファイルで指定)を実行すると、問題が発生します。メインクラスコードの一部が実行されます。その後、静的なfinal org.apache.log4j.Loggerインスタンスが宣言されているクラスを読み込もうとすると、エラーが発生します。
以下は、JNLPファイルの代表的な部分、コード、およびエラーです。
JNLP
<?xml version='1.0' encoding='UTF-8'?>
<jnlp spec="1.5+" codebase="http://localhost:8080/examples" href="DemoInstaller.jnlp" download="eager" main="true">
<information>
<title>Demo Installer</title>
<vendor>Codemart [www.codemart.ro]</vendor>
<homepage>https://sourceforge.net/projects/cminstall/</homepage>
<description>This is a demo installer built using Codemart Installer framework with JavaFX</description>
<description kind="tooltip">Codemart Demo Installer</description>
<offline-allowed />
<shortcut online="true">
<desktop />
</shortcut>
</information>
<security>
<all-permissions />
</security>
<update check="background" />
<resources>
<j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+" />
<jar href="DemoInstaller.jar" main="true" download="eager" />
</resources>
<application-desc main-class="ro.codemart.installer.packer.ant.impl.nestedjar.Main" />
メインクラス:
public class Main {
public static void main(String[] args) throws Exception {
final Main main = new Main();
//this is the problem class !
Class clazz = Class.forName("WizardRunner");
Method m = clazz.getMethod("main", new Class[]{args.getClass()});
m.invoke(null, new Object[]{args});
...
}
}
そして問題のクラス:
public class WizardRunner{
private final static Logger log = Logger.getLogger(WizardRunner.class);
...
}
そしてエラー:
log4j:ERROR[log4j.dtd]が見つかりませんでした。検索で[sun.misc.Launcher$AppClassLoader@d9f9c3]クラスローダーを使用しました。log4j:ERROR URLを解析できませんでした[jar:http:// localhost:8080 / examples / DemoJar.jar!/log4j.xml]。java.io.FileNotFoundException:com.sun.org.apacheのcom.sun.jnlp.JNLPCachedJarURLConnection.getInputStream(Unknown Source)のcom.sun.jnlp.JNLPCachedJarURLConnection.connect(Unknown Source)にJARエントリlog4j.dtdが見つかりません.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)at com.sun.org.apache.xerces.internal.impl .XMLEntityManager.startDTDEntity(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl $ DTDDriver.dispatch (不明なソース)com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl $ DTDDriver.next(不明なソース)com.sun.org.apache.xerces.internal.impl。DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at com.sun.javaws.Launcher.executeApplication(Unknown Source)at com.sun.javaws.Launcher.executeMainClass(Unknown Source)at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)at com.sun.javaws.Launcher.run(Unknown Source)at java.lang.Thread.run(Unknown Source)log4j:WARNロガーのアペンダーが見つかりませんでした( WizardRunner)。log4j:WARNlog4jシステムを正しく初期化してください。lang.Thread.run(Unknown Source)log4j:WARNロガー(WizardRunner)のアペンダーが見つかりませんでした。log4j:WARNlog4jシステムを正しく初期化してください。lang.Thread.run(Unknown Source)log4j:WARNロガー(WizardRunner)のアペンダーが見つかりませんでした。log4j:WARNlog4jシステムを正しく初期化してください。
ありがとうございました!