2016-11-23 12 views
0

JAR libフォルダの下にすべての依存関係がコピーされたJARを実行しようとしました。すべての依存ライブラリが \ abc.jarクラス定義が見つかりませんjarコマンド行実行時にエラーが発生しました。

--- LIB --- COM \ ABC:しかし、私はここでエラー

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コマンドラインは私のJAR構造が実行しようとすると、 --- 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ファイルをロードすることはできませんです。これにはuber-jarクラスローダが必要です。

クラスパスのマニフェストエントリは、クラスパスlibを内部ではなくjarの外側に探します。

通常、すべての依存関係のjarを1つの新しいjarに展開して、すべてのクラスが同じjarファイルにあるようにすることです。 META-INF情報が上書きされるため、これには欠点があります。

もう1つの共通の戦略であっても、前述の代替クラスローダーです。 mavenにはいくつか利用可能です。

私はワンジャーを使用しましたが、それはかなりうまく動作します。もしあなたがspring-bootを使っているのであれば、同じことをするspring-bootクラスローダーがあります。

ワン瓶は、最近捨てられたと思われる、あなたはここで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

apacheのシェードプラグインをmaven用のものはかなり人気が高いようですが、私はこれまでこれを使用していませんでした。 https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html

関連する問題