[SPRING] java.lang.NoClassDefFoundError : com / google / gson / gson
SPRINGjava.lang.NoClassDefFoundError : com / google / gson / gson
나는 이상한 문제를 발견했다. Junit을 사용하여 테스트 케이스를 실행할 수 있지만 maven을 사용하여 실행 중일 때 테스트 케이스 중 하나가 실패했습니다. Gson 클래스 def가 발견되지 않는다고 불평하고 있습니다.
Maven 종속성에서 Gson jar 파일을 볼 수 있습니다.
그래서 나는 classpath가 Gson을 포함하지 않는다는 것을 의심했다. 그래서 -X를 사용하여 maven을 실행하고 단서를 발견했습니다.
[DEBUG] Could not find metadata com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml in local (C:\Users\ra\.m2\repository)
[DEBUG] Skipped remote update check for com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml, locally cached metadata up-to-date.
[DEBUG] Could not find metadata com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml in local (C:\Users\ra\.m2\repository)
[DEBUG] Skipped remote update check for com.example.libraries:Symbology:1.0.0-SNAPSHOT/maven-metadata.xml, locally cached metadata up-to-date.
[WARNING] The POM for com.example.libraries:Symbology:jar:1.0.0-SNAPSHOT is invalid, transitive dependencies (if any) will not be available: 2 problems were encountered while building the effective model for com.example.libraries:Symbology:1.0.0-SNAPSHOT
[ERROR] 'dependencies.dependency.artifactId' for ::jar is missing. @
[ERROR] 'dependencies.dependency.groupId' for ::jar is missing. @
나는 Symbology 프로젝트에 의존하는 프로젝트를 가지고 있고 이것은 Gson을 사용한다. 하지만 이제는이 로그에서 전이 의존성이 포함되지 않는 것을보고 있습니다. 그래서 Gson 클래스를 찾을 수 없습니다.
다음은 Symbology pom입니다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.libraries</groupId>
<artifactId>Symbology</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Symbology</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
다음은 심볼로지를 호출하는 프로젝트의 Pom입니다.
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.libraries</groupId>
<artifactId>FGF</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<distributionManagement>
<snapshotRepository>
<id>example.com</id>
<name>example.com-snapshots</name>
<url>http://example/artifactory/libs-snapshots-local</url>
</snapshotRepository>
</distributionManagement>
<name>FGF</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>com.example.libraries</groupId>
<artifactId>Category</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example.libraries</groupId>
<artifactId>Time</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example.libraries</groupId>
<artifactId>Display</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
**<dependency>
<groupId>com.example.libraries</groupId>
<artifactId>Symbology</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>**
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.0.BUILD-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>org.apache.commons.lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
해결법
-
==============================
1.문제 파악 마지막으로 많은 시간을 보낸 후에.
문제 파악 마지막으로 많은 시간을 보낸 후에.
문제는 심벌 아티팩트를 리포지토리에 푸시 할 때 리포지토리에 pom을 푸시하지 않는 것입니다. 따라서 심볼로지 아티팩트를 의존성으로 사용할 때 내 프로젝트는 전이 의존성을 알 수 없습니다.
그래서 jom을 저장소와 함께 저장소에 넣었습니다. 이제는 모든 종속성을 얻을 수 있습니다.
HURRAYYYYYYYYYYYYYYY !!!!!!!!!!!!!!!!!!
from https://stackoverflow.com/questions/10760667/java-lang-noclassdeffounderror-com-google-gson-gson by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 커스텀 userdetailsservice를위한 bean 정의하기 (0) | 2019.05.05 |
---|---|
[SPRING] 스프링 보안 : 신뢰할 수있는 서브넷을 제외한 모든 요청을 인증합니다. (0) | 2019.05.05 |
[SPRING] Spring-Batch에서 ItemReader로 라인을 건너 뛰는 방법? (0) | 2019.05.05 |
[SPRING] Spring Data로 특정 항목을 볼 때만 특정 필드를 노출합니까? (0) | 2019.05.05 |
[SPRING] 동일한 애플리케이션에서 스프링 보안 양식 로그인 및 oauth2 (0) | 2019.05.05 |