Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 간단
- 자동
- Cluster
- 레디스
- Docker
- login
- ec2
- java
- 젠킨스
- 머신러닝
- fastcampus
- Redis
- Kafka
- gradle
- 예제
- 자바
- aws
- Mac
- vue
- hive
- redash
- Jenkins
- 클러스터
- EMR
- 로그인
- 설정
- config
- SpringBoot
- Zeppelin
- spring
Archives
- Today
- Total
코알못
[Gradle] 실행 가능한 JAR 파일 만들기 (with 스프링 멀티 모듈) 본문
728x90
간단한 프로젝트를 만들어 보겠다!
- 모듈 3개
- core-util : 공통으로 사용하는 메소드 모듈
- run-a , run-b: base64로 암호화된 값을 보내면 디코딩 한 후 해당 메세지에 모듈명을 붙인뒤, Base64로 암호화해서 리턴하는 모듈
- 예) ran-A 모듈에 "코린이" base64 인코딩 하여 요청 > "코린이:run-A" base64 인코딩 한 값 리턴
- 각각 실행 가능한 2개의 Jar 파일 만들기
- run-a.jar
- run-b.jar
- 실제 실행해보기
만들어보자!
:: github.com/works-code/multi-module
1. 모듈 만들기 (아래와 같이 3개를 만든다)
- 생성 완료
- 모듈 별 설정은 가장 상위 프로젝트인 multi-module 의 build.gradle, setting.gradle 에서 해줄거라 각 모듈의 build.gradle, setting.gradle 을 주석 처리 한다.
- 가장 상위 프로젝트인 multi-module 의 settings.gradle 에 각 모듈을 정의해준다.
- 가장 상위 프로젝트인 multi-module 의 build.gradle 에 설정을 아래와 같이 한다.
plugins {
id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
/***
* 모든 프로젝트 적용 (root 포함)
*/
allprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.code'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
// 기본 패키지 스토리지
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
}
/***
* 각각 프로젝트 설정
*/
project(":run-a"){
// jar 이름 지정
jar {
archivesBaseName = 'run-a'
}
// 버전별로 jar 생성을 위해 필요 (버전별 관리가 필요함.)
version '1.0.0-SNAPSHOT'
dependencies{
compile project (':core-util')
}
}
project(":run-b"){
// jar 이름 지정
jar {
archivesBaseName = 'run-b'
}
// 버전별로 jar 생성을 위해 필요 (버전별 관리가 필요함.)
version '1.0.0-SNAPSHOT'
dependencies{
compile project (':core-util')
}
}
project(":core-util"){
/***
* compile project dose not exist 오류 해결
* 외부 프로젝트에서 가져온 클래스를 인식못하는 문제가 있어 아래와 같이 설정
*/
jar{
enabled = true
}
}
- 컨트롤러 정의 (A, B 모듈 동일)
package com.code.controller;
import com.code.utils.CommonUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AController {
@Value("${module.name}")
private String moduleName;
@RequestMapping(value = "/")
public String start(@RequestParam String text){
// core-util 메소드 사용
String decodeTxt = CommonUtils.decodeBase64(text);
return CommonUtils.encodeBase64(decodeTxt+moduleName);
}
}
- 테스트
- RUN-A : helloworld(aGVsbG93b3JsZA==) 를 호출하니 helloworld:run-a(aGVsbG9Xb3JsZDpydW4tYQ==) 를 정상적으로 리턴한다.
- RUN-B : helloworld(aGVsbG93b3JsZA==) 를 호출하니 helloworld:run-b(aGVsbG93b3JsZDpydW4tYg==) 를 정상적으로 리턴한다.
2. 실행 가능한 jar 파일 만들기
$ cd 프로젝트경로
$ ./gradlew build bootJar -x test // 빌드 + jar 파일 만들기 + 테스트 코드는 제외
3. 실행해보기
$ java -jar run-a/build/libs/run-a-1.0.0-SNAPSHOT.jar
- 정상적으로 기동됨.
728x90
'JAVA' 카테고리의 다른 글
5분 안에 구축하는 Redis-Cluster (5) | 2021.05.10 |
---|---|
5분 안에 구축하는 Redis-Sentinel + HAProxy (1) | 2021.05.05 |
5분 안에 구축하는 Redis-Sentinel (1) | 2021.04.08 |
5분 안에 구축하는 Redis(레디스) (1) | 2021.02.15 |
[에러] NoClassDefFoundError: com/fasterxml/jackson/databind/JsonSerializer (0) | 2021.02.15 |
Comments