У меня следующая проблема: я развернул в Tomcat файл JNLP и исполняемый файл JAR. Файл JNLP должен автоматически загрузить файл JAR и выполнить его. Файл JAR подписан и проверен. Это сделано (часть загрузки). Но при выполнении основного класса JAR (указанного в файле JNLP) возникает проблема: выполняется часть кода основного класса. Впоследствии, когда он пытается загрузить класс, в котором объявлен статический конечный экземпляр 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" />
The main class:
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.jar - он не указан или не загружен файлом .jnlp. В предыдущем ответе вы упомянули, что он находится в вашем пути к классам, но что, если вы работаете через WebStart? Я считаю, что ваш путь к классам ограничен тем, что определено в файле .jnlp.