만쥬의 개발일기

gson은 json 파일의 내용을 읽어서 java 객체로 만들어주는 라이브러리다.

implementation 'com.google.code.gson:gson:2.8.9'

위와 같이 build.gradle에 의존성을 추가하면 사용 가능하다.

 

그러나 해당 라이브러리를 참조하는 과정에서 오류가 생길 때가 있었다.

 

intellij등의 IDE를 통해 자바 프로젝트를 실행하면 라이브러리를 잘 참조했으나, jar 파일로 만들어 실행하면 다음과 같은 에러가 뜨는 것이었다.

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson
        at Potatonet.PortScan.application.APICaller.getIpListWithPortList(APICaller.java:42)
        at Potatonet.PortScan.Main.main(Main.java:22)
Caused by: java.lang.ClassNotFoundException: com.google.gson.Gson
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 2 more

이상하게 jar 파일을 만들면 참조를 못하는 문제가 있어, 무한 구글링 끝에,, 다음 코드를 build.gradle에 작성하고 해결하였다.

tasks.jar{
duplicatesStrategy = 'exclude'
    from{
		configurations.runtimeClasspath.collect{it.isDirectory() ? it : zipTree(it)}
   	}
manifest{
	attributes(
              'Main-Class': 'Potatonet.PortScan.Main'
        	)
	}
}
profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!