У меня проблема с запуском моего Java-проекта.
E:\Workspace\compiled>java -classpath server\libraries\log4j-1.2.16.jar;E:\Workspace\compiled\server\service-1.0-SNAPSHOT.jar;E:\Workspace\compiled\server\libraries\log4j-1.2.16.jar -Djava.security.policy=E:\Workspace\compiled\socket.policy -Djava.rmi.server.codebase=file:///E:\Workspace\compiled\server\service-1.0-SNAPSHOT.jar -jar E:\Workspace\compiled\server\service-1.0-SNAPSHOT.jar E:\Workspace\compiled\log4j.properties
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/PropertyConfigurator
at pwr.mgr.server.service.Launcher.main(Launcher.java:18)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.PropertyConfigurator
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
Он скомпилирован с использованием maven, и я получаю файл .jar.
Сегодня я решил, что я буду использовать log4j для регистрации вместо wimple System.out ...
До этого изменения все работало нормально
вот как я запускаю
java -cp .;%SRV_ADDR%;%SRV_LIBS% -Djava.security.policy=%POLICY_FILE% -Djava.rmi.server.codebase=file:///%SRV_ADDR% pwr.mgr.server.service.Launcher %CD%\log4j.properties
SRV_ADDR указывает на мой файл service.jar (с классом запуска)
SRV_LIBS указывает на log4j-1.2.16.jar
Я добавил ".;" вначале надеясь, что это поможет, потому что упомянутые файлы находятся в дочернем каталоге по сравнению с тем, который я пытаюсь запустить.
Я должен также упомянуть, что мне нужно где-то здесь найти библиотеку log4j, потому что я перенесу свое приложение на другую машину, и я не знаю, какие библиотеки ожидать там, может быть, только на чистой Java, поэтому мне нужно доставить все в одной упаковке.
Если кто-то заинтересован в классе Launcher, это очень просто:
public class Launcher {
public static void main(String args[]) {
PropertyConfigurator.configure(args[0]);
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
Runtime.getRuntime().exec("rmiregistry");
ServerIntf obj = new Server();
Registry registry = LocateRegistry.getRegistry();
registry.rebind("Server", obj);
System.out.println("Server bound in registry");
} catch (Exception e) {
System.out.println("Server err: " + e.getMessage());
e.printStackTrace();
}
}
}
Кто-нибудь знает, что я делаю не так? Может быть, недостаточно добавить только один файл jar log4j? Я скопировал его из моего хранилища Maven.
EDIT1 уже изменил jar, на который я указываю с log4j-1.2.16-javadoc.jar на log4j-1.2.16.jar, но это не помогло