2016-11-23 3 views
0

JAR lib 폴더 아래에 복사 된 모든 종속성이있는 JAR을 실행하려고했습니다.클래스 정의가 없습니다. jar 명령 행 실행시 오류가 발생했습니다.

abc.jar --- lib 디렉토리 \ 모든 종속 라이브러리 --- 닷컴 \ ABC 방송 : 나는 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 구조입니다 --- META-INF

여기 항아리에 포함 된 단지를로드 할 수 없습니다

<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

자바 내 pom.xml 파일입니다. 이를 위해서는 uber-jar 클래스 로더가 필요합니다.

클래스 경로의 매니페스트 항목은 내부가 아닌 jar 외부의 클래스 경로 lib을 찾습니다.

일반적인 전략은 모든 종속성 항아리를 하나의 새로운 항아리로 확장하여 모든 클래스가 동일한 jar 파일에 있도록하는 것입니다. 이것은 META-INF 정보가 겹쳐 쓰기 때문에 단점이 있습니다.

다른 일반적인 및 심지어 작동 전략은 이미 언급 된 대체 클래스 로더입니다. maven에는 몇 가지가 있습니다.

나는 한 병을 사용했으며, 꽤 잘 작동합니다. spring-boot를 사용한다면, spring-boot classloader가 있습니다. http://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html

그 파일은 아파치 그늘 플러그인 :

한 항아리 요즘 포기, 당신이 여기 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/

봄 부팅 스프링 부트 로더를 사용합니다 메이븐 (maven)이 꽤 인기있는 것 같지만, 지금까지 그렇게 사용하지 않았습니다. https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html