사이드프로젝트 정리1 (멀티 모듈 설정, gradle)
처음에 프로젝트 진행시 모듈화를 진행하지 않았습니다. 추후에 진행하게되었는데요. 아무래도 혼자서 모두 진행하다보니 굳이 기능별 모듈화를 나눠서 진행할 필요성을 느끼지 못해서 그런것 같습니다.
하지만 기능별 모듈화를 진행하게되면 관리적인 측면이나 개발적인 측면등에서 장점이 많다는 것을 알게 되었으며, 추후에 추가적인 기능들을 생각하여서 모듈화를 지금이라도 진행하게 되었습니다.
모듈화 후 디렉토리 구성은 다음과 같습니다
MAIN
- chat
- build.gradle
- batch
- build.gradle
build.gradle
setting.gradle
각 서브 모듈마다 gradle 설정파일이 따로 있고 전체를 관리하는 gradle이 따로 있습니다.
먼저 main의 build.gradle에 다음과 같이 추가하였습니다.
plugins {
id 'org.springframework.boot' version '2.6.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
// RestDocs 관련
id 'org.asciidoctor.jvm.convert' version '3.1.0'
// jacoco
id 'jacoco'
// sonarqube
//querydsl 추가
// id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'malangcute.bellytime'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
// sub-module(batch)
subprojects {
group 'malangcute.bellytime'
version '1.0'
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.springframework.boot'
sourceCompatibility = 11
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
}
subprojects 부분이 모듈에서 공통적으로 적용될 부분을 작성하는 곳입니다.
이 부분이 어떤 plugin을 적용할지, 공통적으로 적용될 의존성등을 적어 놓습니다.
다음은 main의 setting.gradle 부분입니다.
rootProject.name = 'bellytimeCustomer'
include 'batch'
include 'chat'
맨 위에는 전체 프로로젝트의 이름을 적고, 그 하위에 적용될 모듈의 이름을 include 로 적습니다
전체 프로젝트 아래 다음과 같은 모듈들이 있음을 알 수 있습니다.
다음은 batch 모듈의 build.gradle 파일입니다.
plugins {
id 'java'
}
group 'malangcute.bellytime'
version '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
// 최상위 루트 포함
dependencies {
implementation(project(':' ))
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
//스프링 배치 설정
implementation 'org.springframework.boot:spring-boot-starter-batch'
//quartz 스케쥴러 추가
implementation 'org.springframework.boot:spring-boot-starter-quartz'
}
test {
useJUnitPlatform()
}
// 루트 프로젝트에 포함하여 빌드 -> sub module에는 main 메소드가 없어서 빌드에 실패함 따라서
//아래와 같이 설정 적용해줘야함(jar만 생성)
bootJar {
enabled = false
}
jar {
enabled = true
}
이 모듈에 필요한 의존성등을 따로 적어 추가할 수 있습니다. 그리고 dependencis 부분의 implementation에 내가 같이 사용할 모듈을 적으면 됩니다. 즉 common 모듈의 부분을 적어주면 됩니다.
저같은 경우 공통 부분이 상위 프로젝트이기 때문에 ':' 으로 상위 프로젝트를 갖고와서 적용한다는 의미로 적었습니다.
그리고 아래에
bootJar ~ 부분의 설정을 저렇게 해준 이유는 서브 모듈은 main 메소드가 없기 때문에 저 설정 없이 빌드하면 실패가 됩니다.
따라서 bootjar가 아닌 jar파일만 생성하도록 따로 설정해주어야 합니다.
Author And Source
이 문제에 관하여(사이드프로젝트 정리1 (멀티 모듈 설정, gradle)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kurikuri/사이드프로젝트-정리1-멀티-모듈-설정-gradle저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)