요즘 플링크를 공부하고 있다.
플링크는 코드를 작성한 후 Jar파일을 업로드해서 실행해야하는데 Gradle로 Jar를 빌드하고 실행하려는데 다음과 같은 에러를 몇개 마주하였다.
no main manifest attribute
해당 에러는 gradle로 빌드시 MainClass를 지정해주지 않아 생기는 에러로 build.gradle에 다음 코드를 추가해주면 된다.
jar {
manifest {
attributes 'Main-Class' : 'yourpackage.ClassName'
}
}
또한 다음 에러를 마주하였는데
exception in thread "main" java.lang.noclassdeffounderror: org/apache/flink/streaming/api/datastream/datastream
해당에러는 Jar를 빌드시 라이브러리의 디펜던시가 포함되지 않아서 발생하는 에러이다.
플링크는 코드의 Library 디펜던시문제를 해결하기위해 플링크의 Lib폴더에 해당 라이브러리의 Jar파일을 넣어주거나, 라이브러리의 디펜던시가 모두 포함되는 FatJar(UberJar)를 만들면 된다.
그래서 FatJar를 만들기위해 다음과 같은 방법으로 만드려 했는데, 방법이 잘못되었는지 잘 되지않았다.
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
그래서 찾아낸것은, ShadowJar다. FatJar를 만드는 플러그인으로 보면 되고 ShadowJar의 github은 https://github.com/johnrengelman/shadow 이곳을 참고하면 된다.
사용방법은 어렵지 않은데 build.gradle에 다음 코드를 추가시켜주고
plugins {
id "com.github.johnrengelman.shadow" version "6.1.0"
}
gradle shadowJar 를 실행시켜주면 생성가능하다.
ShadowJar를 추가할 때, gradle의 버전과 ShadowJar의 버전을 맞춰주지않으면 에러가 발생하니 버전을 맞춰주어서 빌드하자.

좋은 글 잘 보고 갑니다.