하위 모듈은 core, web, admin 세가지를 생성 한다.
모두 Gradle 프로젝트로 생성한다.
core 모듈은 web, admin 에서 공통으로 사용하는 모듈이다.
모듈을 추가하면 루트 프로젝트의 setting.gradle 에 하위 프로젝트들을 포함시켜야 한다.
settings.gradle
rootProject.name = 'demo'
include 'demo-core'
include 'demo-web'
include 'demo-admin'
// 빌드 시
buildscript {
ext {
springBootVersion = '2.5.3'
}
repositories {
mavenCentral()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
classpath "io.spring.gradle:dependency-management-plugin:1.0.4.RELEASE"
}
}
// 하위 모든 프로젝트 공통 세팅
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
compileJava.options.encoding = 'UTF-8'
repositories {
mavenCentral()
}
// 하위 모듈에서 공통으로 사용하는 세팅 추가
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
test {
useJUnitPlatform()
}
}
// 각 프로젝트에서만 사용하는 의존성 추가
project(':demo-core') {
// core 에서는 bootjar로 패키징 할 필요가 없으므로 추가
bootJar.enabled = false
jar.enabled = true
dependencies {
}
}
project(':demo-web') {
dependencies {
// 컴파일시 core 모듈을 가져온다.
compileOnly project(':demo-core')
implementation 'org.springframework.boot:spring-boot-starter-web'
}
}
project(':demo-admin') {
dependencies {
compileOnly project(':demo-core')
implementation 'org.springframework.boot:spring-boot-starter-web'
}
}
package com.example.demo.entity;
import lombok.Data;
@Data
public class Member {
private Long id;
private String name;
}
Lombok 사용 에러 시 다음 항목 체크
< admin 모듈 >
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
< web 모듈 >
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
< admin 모듈 >
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello admin";
}
}
< web 모듈 >
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello web";
}
}
web, admin 모듈에서 core 모듈의 Member 클래스를 사용할 수 있는 것을 확인 할 수 있다.
web : application.yml
server:
port: 8080
admin : application.yml
server:
port: 8081
실행 확인
프로젝트 구조
gradle build
빌드 성공시 각 모듈별로 실행가능한 jar 파일이 생성 된다.
core 모듈의 경우에는 생성하지 않는다.
jar 파일 실행
java -jar demo-admin/build/libs/demo-admin-1.0-SNAPSHOT.jar