2014-07-24 5 views
1

maven 프로젝트를 만들었습니다. log4j2 의존성을 POM에 추가했는데 내 프로젝트에서 LogManager 클래스를 가져올 수 없습니다. 왜? 이것은 maven 콘솔에서 출력됩니다.Maven 프로젝트가 log4j2 클래스를 가져올 수 없습니다.

c:\Users\Dawid\Desktop\Pracbaza\my-project>java -cp target\my-project-1.0-SNAPSHOT.jar com.spica.project.App 
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager 
    at com.spica.project.App.<clinit>(App.java:7) 
    Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    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) 
    ... 1 more 

답변

2

당신은 너무 받는다는이 프로젝트의 log4j에 의존한다는 것을 알고는 치어에 그 종속성을 추가했으나 지금 받는다는 실행 아닙니다. 자바 실행 파일을 사용하여 컴파일 된 코드를 실행합니다. java는 pom.xml이 무엇인지 전혀 알지 못한다 (maven은 외부 도구이기 때문에).

  1. 목록 CP 인수에 모든 종속성뿐만 아니라 당신의 항아리 :

    당신은 몇 가지 옵션이 있습니다. 그래서 java -cp target\your.jar;path\to\log4j2.jar;anything;else

  2. 은 jar 파일의 MANIFEST.MF file에 의존성을 나열합니다. 당신은 절대 경로 (나쁜 생각) 또는 파일 이름을 나열하고 항아리와 함께 libs를 놓을 수 있습니다
  3. 항아리를 jar-with-dependencies 또는 onejar으로 포장하십시오. 그런 식으로 모든 라이브러리를 자신의 코드와 함께 묶어서 찾을 수 있습니다. 당신이 선택하기 전에 당신이 더 잘 이해할 수있는이 두 옵션 사이에 차이가 있습니다.
+0

나는 onejar 옵션을 사용했으며 ... 여전히 작동하지 않습니다 ... – dklos

+0

감사합니다, 나는 바보입니다.) – dklos

1

이것은 log4j jar가 코드를 실행하는 동안 classpath에 없기 때문입니다. 클래스 패스에 log4j jar를 추가하십시오 (-cp 스위치에 있음).

관련 문제