Gradle Dependency & Shadow Jar Inspection
1. Gradle Introduction
1.1 Gradle 101
- dependencies
- implementation: 해당 모듈에서만 사용. 다른 모듈에서 사용시 해당 dependency 사용 불가
- api: 해당 모듈뿐만 아니라, 다른 모듈의 dependency 에도 영향을 줍니다.
- compileOnly: 컴파일시에만 필요하고, 런타임시에는 사용안됩니다.
- 예를 들어서 EMR 클러스터안에 이미 spark가 존재하기 때문에, compileOnly 로 설정하게 되면, jar shadow 만들어질때는 spark가 포함이 안되게 됩니다.
- runtimeOnly: 런타임시에만 사용되며,
- 예를 들어서 mysql-connector-java 같은 경우 런타임시 실제 접속할때 사용하게 되며, 코딩할때는 JDBC API 를 통해서 코드를 컴파일 합니다.
1.2 Excluding Dependency
특정 dependency 를 제외 시키는 것은 다음과 같이 할 수 있습니다.
포인트 부분은 버젼에서 .*
이렇게 적어서 모든 버젼을 다 제외시키게 만들었습니다.
shadowJar {
archiveBaseName.set('my-dependency-example')
archiveClassifier.set("incredible-ai")
dependencies {
exclude(dependency('org.spark-project.hive:hive-exec:.*'))
}
setZip64(true)
}
“org.spark-project.hive” group 을 모두 exclude 하려면 다음과 같이 합니다.
shadowJar {
archiveBaseName.set('my-dependency-example')
archiveClassifier.set("incredible-ai")
dependencies {
exclude(dependency('org.spark-project.hive::'))
}
setZip64(true)
}
2. How to Inspect Shadow Jar File
2.1 Java Decompiler Project
https://java-decompiler.github.io/
How to | Description |
---|---|
spark version check | spark-version-info.properties \n |
maven dependencies | /META-INF/maven 디렉토리에서 dependencies 확인 가능합니다. |
2.2 IntelliJ Plugin - File Expander
File -> Settings -> Plugins -> Search “File Expander”
위와 같이 검색후 File Expander 를 다운로드 받습니다.
아래와 같이 META-INF/maven 에서 설치된 dependencies 들을 확인 할 수 있습니다.