gpt4 book ai didi

java - 尝试使用外部库运行 java 时出现 NoClassDefFounderror

转载 作者:行者123 更新时间:2023-11-30 06:35:50 27 4
gpt4 key购买 nike

我在运行我的 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(带有 Launcher 类)

SRV_LIBS 指向log4j-1.2.16.jar

我添加了“.;”一开始希望它会有所帮助,因为提到的文件位于我尝试启动此文件的子目录中。

我还应该提到,我需要在这里的某个地方安装 haev 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();
}
}
}

有人知道我做错了什么吗?也许只添加一个 log4j jar 文件还不够?我从我的 Maven 存储库中复制了它。

EDIT1 已经将我指向的 jar 从 log4j-1.2.16-javadoc.jar 更改为 log4j-1.2.16.jar 但它没有帮助

最佳答案

当使用 java -jar ... 时,the -classpath argument is ignored .在主 jar 的 list 中指定所有必要的 jar(但你只能在那里使用相对路径),或者将主 jar 添加到 -classpath 并在命令行中提及主类。

是的,我也不喜欢这个。

关于java - 尝试使用外部库运行 java 时出现 NoClassDefFounderror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5490301/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com