Java/Gradle

Intellij에서 Gradle로 멀티프로젝트 관리하기!!!

willbsoon 2020. 5. 21. 15:05

Intellij에서 Gradle로 멀티프로젝트 관리하기를 해보자.

 

개발하다보면 많은 프로젝트를 동시에 관리하고싶은 순간들이 온다. 그럴때 어떻게 해야할지?? 고민해보자.

 

먼저 Eclipse와는 다르게 Intellij에는 패키지라는 개념이 없고, 그와 비슷한 프로젝트가 있다.

그렇다면 Eclipse에서 프로젝트라는 개념은 Module이 있다.

표로 정리해보자면 

Eclipse IntelliJ
package project
project module


그러니 사실상 멀티 모듈을 관리하는법이라고 봐야 맞겠다.

실제로 만들면서 알아보자.

 

 

 

1. 프로젝트 생성

메뉴에서 File > New > Project 를 누르게되면 새창이 뜬다.

이 상태로 next 를 누르자

이제 그룹과 아티팩트를 입력하고 gradle  설정을 입력하고 마지막으로 프로젝트 이름과 경로를 정하면 새로운 프로젝트가 완성이 된다. 

 

완성된 신규 프로젝트. 이제 모듈을 추가해보자.

 

 

 

2. 모듈 추가

이제 모듈을 추가해볼껀데, 상위 프로젝트 폴더에서 우클릭을하고 New > Module을 찾아도 된다.

하지만 우리 스마트하게 단축키를 써보자

새로운 파일을 생성하는 단축키는 Ctrl + Alt + Insert 이다.

 

작게 뜨는 창에서 Module을 선택하고 모듈을 만들어보자.

gradle은 멀티모듈을 지원하기 때문에 새로 만드는 모듈은 굳이 gradle로 설치할 필요는 없다. 그냥 java 모듈을 만들면 된다. 아무것도 선택하지 않아도 되고, 필요한 기능이 있다면 추가해도 될것이다.

 

 

이렇게 새로운 모듈을 몇개 더 추가해준다. 나는 총 4개의 모듈을 추가해주었다.

이제 멀티모듈을 세팅해보자

 

 

 

3.settings.gradle 설정

settings.gradle 파일에 들어가서 모듈을 추가해주자

rootProject.name = 'project1'
include 'module1'
include 'module2'
include 'module3'
include 'module4'

 

모듈을 추가하고 이게 적용되었는지 보려면 우측에 gradle 메뉴를 눌러보면 모듈이 추가된것을 확인할수 있다.

하지만 아직 gradle 설정이 끝나지 않아 모듈에는 실행할수 있는게 없는것을 볼수있다.

project1에는 빌드도 있고 여러가지 있는것을 볼수있는데 이제 gradle을 설정해서 모든 모듈에서 작업이 가능하도록 설정해보자.

 

 

 

4. build.gradle 설정

build.gradle을 들어가서 코드를 수정해보자.

 

plugins { 
    id 'org.springframework.boot' version '2.3.0.RELEASE'
    // 2.3 버전은 gradle 5 이상 버전을 써야함.
    // 에러 발생하면 /project1/gradle/wrapper/gradle-wrapper.properties 에서 버전 수정해야함.
    id 'io.spring.dependency-management' version '1.0.9.RELEASE' 
    id 'java' 
}

repositories {
    mavenCentral()
}

subprojects { 
    // allprojects , subprojects에는 plugins 를 쓸수 없어 apply plugin을 사용해야함.
    apply plugin : 'java' 
    apply plugin : 'org.springframework.boot' 
    apply plugin : 'io.spring.dependency-management' 
    
    group = 'com.example' 
    version = '0.0.1-SNAPSHOT' 
    
    sourceCompatibility = '1.8'

    repositories {
        mavenCentral()
    }
    
    dependencies { 
        testImplementation('org.springframework.boot:spring-boot-starter-test') { 
            exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' 
        } 
    } 
} 
// 프로젝트별로 dependency를 설정할수 있음.
project(':module1') { 
    bootJar { 
        enabled = false 
    } 
    jar { 
        enabled = true 
    } 
    dependencies { 
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 
        runtimeOnly 'com.h2database:h2' 
        runtimeOnly 'org.postgresql:postgresql' 
    } 
}

project(':module2') { 
    dependencies { 
        implementation 'org.springframework.boot:spring-boot-starter-web' 
        implementation project(':module1') 
    } 
} 
project(':module3') {
    dependencies { 
        implementation 'org.springframework.boot:spring-boot-starter-web' 
        implementation project(':module1') 
    } 
}
project(':module4') {
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
        implementation project(':module1')
    }
}

 

이렇게 한뒤 gradle 창에서 refresh버튼을 누르면 dependency 가 추가되어있는것을 확인할수 있다.

아래는 디렉토리 구조와 dependency가 추가된 것을 확인해보자. 모듈 내에 iml 파일은 굳이 삭제해도 상관없다.

 

 

 

5. 확인~~~

 

 

아주 잘 되었다.

각 모듈에 src 폴더만 있으니 java, resource 폴더 생성하고 개발을 해보자

끝~