![](/img/trans.png)
[英]Running jar file in command prompt. Java can't find libraries in classpath
[英]Execute jar file with multiple classpath libraries from command prompt
我有一個Maven項目,該項目生成一個jar文件並將所有依賴項復制到target/lib
文件夾。 我想在客戶端計算機(Windows)上執行該項目。 因此,我將myproject.jar
復制到C:\\xyz
文件夾,並將所有依賴項復制到C:\\xyz\\lib
文件夾。 如何從客戶端的命令提示符下執行此項目? 我試圖從C:\\xyz
文件夾中使用java -cp lib\\*.jar -jar myproject.jar
,但它引發以下錯誤。
Exception in thread "main" java.lang.NoClassDefFoundError: lib\commons-codec-1/3/jar
Caused by: java.lang.ClassNotFoundException: lib\commons-codec-1.3.jar
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)
Could not find the main class: lib\commons-codec-1.3.jar. Program will exit.
我想如果我在classpath中指定所有依賴項(例如java -cp lib\\dep1.jar;dep2.jar
),它將擺脫此問題,但由於已有40個庫,所以我不想這樣做在將來的版本中增長。 有一個更好的方法嗎?
在UNIX上使用Java 1.7-
java -cp myjar.jar:lib/*:. mypackage.MyClass
在Windows上,您需要使用';' 代替 ':' -
java -cp myjar.jar;lib/*;. mypackage.MyClass
讓maven生成一個批處理文件以啟動您的應用程序。 這是最簡單的方法。
您可以將appassembler-maven-plugin用於此類目的。
無論使用哪種操作系統,以下命令均應起作用:
java -cp "MyJar.jar;lib/*" com.mainClass
始終使用引號,並請注意lib / *。jar將不起作用。
您可以使用maven-assembly-plugin,這是來自官方網站的示例: https : //maven.apache.org/plugins/maven-assembly-plugin/usage.html
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>your main class</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
我遇到了同樣的問題,但是能夠使用Maven Shade插件將所有依賴項打包到我的jar文件中
這將無法使用java -cp lib\\*.jar -jar myproject.jar
。 你必須把它一個罐一個罐地放。
因此,在commons-codec-1.3.jar
情況下。
java -cp lib/commons-codec-1.3.jar;lib/next_jar.jar
等。
另一個解決方案可能是將所有jar放入JRE的ext
目錄。 如果您使用的是獨立JRE,則可以。 如果您使用同一JRE來運行多個應用程序,則不建議這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.