问题描述
我为实用程序文件创建了一个jar文件,并将其添加为我的主项目的依赖项.当我运行 mvn install
来构建我的主项目时,在我的单元测试中使用了正确的实用程序jar.
I created a jar file for utility files and added it as a dependency for my main project. When I run mvn install
to build my main project, the correct utility jar is used in my unit tests.
但是,当我以后使用 java -jarsupervisor.jar
运行主项目jar时,却出现了 java.lang.NoClassDefFoundError:
,这是由 java引起的.lang.ClassNotFoundException:com.seeq.utilities.process.OperatingSystem
.
However, when I later run the main project jar using java -jar supervisor.jar
, I get a java.lang.NoClassDefFoundError:
caused by java.lang.ClassNotFoundException: com.seeq.utilities.process.OperatingSystem
.
在我的单元测试中,使用了 OperatingSystem
并且测试运行良好,因此我假设在使用 java -jar
时,java找不到实用程序jar.是这个问题,我该如何解决?
In my unit tests, OperatingSystem
is used and the tests run fine, so I am assuming that the utility jar is not found when by java when using java -jar
. Is that the issue and how could I fix it?
Exception in thread "main" java.lang.NoClassDefFoundError: com/seeq/utilities/process/OperatingSystem
at com.seeq.supervisor.util.ProcessManager.buildCommand(ProcessManager.java:78)
at com.seeq.supervisor.util.ProcessManager.<init>(ProcessManager.java:27)
at com.seeq.supervisor.Supervisor.start(Supervisor.java:40)
at com.seeq.supervisor.Main.main(Main.java:21)
Caused by: java.lang.ClassNotFoundException: com.seeq.utilities.process.OperatingSystem
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 4 more
我如何在pom.xml中添加依赖项:
How I added the dependency in my pom.xml:
<dependency>
<groupId>com.seeq.utilities</groupId>
<artifactId>seeq-utilities</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/../common/libraries/java/seeq-utilities/target/seeq-utilities-1.0.jar</ systemPath>
</dependency>
推荐答案
如果找不到的类位于jar中,则必须提供classpath参数;例如:
If the not found class is inside a jar, you have to provide the classpath arguments; for example:
java -cp a.jar -jar supervisor.jar
这篇关于运行可执行jar时发生ClassNotFoundException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!