2016-11-23 129 views
0

我試圖執行一個JAR,它具有在JAR lib文件夾下複製的所有依賴關係。但是當我嘗試執行JAR命令行我得到以下錯誤執行jar命令行時沒有發現類錯誤

at com.abc<clinit>(abc.java:33)Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger 
     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) 

這裏是我的JAR結構:

abc.jar ---的lib \所有依賴庫 --- COM \ ABC --- META-INF

,這裏是我的pom.xml

<artifactId>maven-jar-plugin</artifactId> 
     <version>2.4</version> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <useUniqueVersions>false</useUniqueVersions> 
       <mainClass>com.main.class</mainClass> 
       <classpathPrefix>./lib/</classpathPrefix> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
      <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
       <phase>prepare-package</phase> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>${project.build.directory}/classes/lib</outputDirectory> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
    </build> 

回答

0

的java在一個罐子裏不能加載嵌入的罐子。你需要一個超級jar的類加載器。

類路徑的清單條目將在jar外部尋找類路徑lib,而不是在裏面。

通常的策略是將所有的依賴jar擴展成一個新的jar,這樣所有的類都在同一個jar文件中。這有缺點,因爲META-INF信息被覆蓋。

其他常見甚至是工作策略是已經提到的替代類加載器。有一些可用於maven。

我已經使用了單罐,它工作得很好。如果你使用彈簧引導,那麼彈簧引導類加載器會爲你做同樣的事情。

一罐子似乎是時下拋棄,你可以在這裏找到https://mvnrepository.com/artifact/com.jolira/onejar-maven-plugin/1.4.4,而這些人有某種教程https://www.mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/

春天開機使用彈簧引導裝載程序:http://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html

的阿帕奇遮陽插件因爲maven似乎很受歡迎,但我迄今還沒有使用過。 https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html

相關問題