Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 경력개발자
- sonoff
- ASUS 공유기
- EXK
- Value Object(VO)
- LAN WAN
- USB-C충전
- 소프트웨어설계
- 자바개발
- LG그램2017
- USB-C to HDMI 아답터
- 자바튜닝
- 객체설계
- SW설계
- maven #junit
- angular 6
- SI와 SM 차이점
- Data Transfer Object(DTO)
- 네트워크 기본개념
- CBD 단점
- open cursors
- SpringBoot
- 자바스크립트 JQuery
- tvheadend
- 구글캘린더 검색
- SW분석
- Tomcat error-page version
- docker 네트워크
- 실해하지 않는
- 프로젝트관리
Archives
- Today
- Total
대빵's Blog
gradle executable jar 만들기 본문
springboot 는 워낙 편의장치가 많아서 별 고민안했는데 간만에 Main 하나 만들려니 gradle 대충알다가 엄청난 삽질을...
일단 gradle version 은 7.3.1 이다. 이것도 버전별로 워낙 변경사항이 많아서 버전별로 다른 내용이 많으니 참고
아래는 build.gradle 내용임
plugins {
id 'application'
id 'java-library'
id 'org.jetbrains.kotlin.jvm' version '1.5.10'
}
repositories {
mavenCentral()
}
dependencies {
// https://mvnrepository.com/artifact/org.redisson/redisson
implementation group: 'org.redisson', name: 'redisson', version: '3.2.0'
}
def version = '0.1'
def mainClassName= 'MainKt'
// gradle default jar 를 커스터마이징 한다.
// manifest default 생성값을 제외하고 별도로 만들어준다.
jar {
manifest {
attributes(
'Title': 'RedisDistributedLock',
'Version': version,
'Main-Class': mainClassName,
)
}
from(configurations.runtimeClasspath.collect {
it.isDirectory() ? it : zipTree(it)
}) {
exclude 'META-INF', 'META-INF/**'
}
}
위의 코드에서 가장 중요한 부분은 jar 부분
일단 jar 실행파일을 만들려면 두가지를 해결해야 한다. 1. 참조되는 라이브러리들을 넣어줘야 한다. 2. manifest 를 만들어 넣어야 한다.
gradle command(./gradlew clean build)로 jar를 만들면 하단에 jar 부분이 기본적으로 없어도 된다. 그래도 jar는 만들어지고 manifest도 생성된다.
문제는 executable jar 를 만들려면 gradle의 기본 jar를 위에 내용처럼 override 해서 정의하면서 from 절에 참조되는 라이브러리를 넣도록 해야 되는데 이때 자동으로 만들어진 manifest와 jar를 override 하면서 만들어진 manifest 두개가 동시에 만들어지면서 gradle 에서 멀티(?) manifest 에러가 발생한다.
그래서 from 에서는 manifest를 exclude로 제거하고 manifest를 내가 임의로 넣어주는 것을 추가하여 위의 코드처럼 build.gradle 을 구성한다.
참고로 위의 gradle 은 Redis 분산락을 테스트하는 코드이다. 전체코드는 여기서 참고 (코틀린이다.)
'개발관련' 카테고리의 다른 글
gradle manually install (gradle 수동설치) (0) | 2022.04.17 |
---|---|
gradle dependencies 확인하기 (0) | 2022.04.17 |
자바스크립트 코드 개선 기술 (0) | 2021.08.10 |
SourceTree(Atlassian) with WSL(SourceTree 에서 WSL 소스보기) (0) | 2021.03.31 |
소프트웨어 버그와 에러의 구분이 필요한 이유(주관적인 관점으로...) (0) | 2021.03.06 |