본문 바로가기

서버/SpringBoot

[Spring] 하나의 build.gradle 파일로 여러 내부 프로젝트 빌드하기

하나의 프로젝트 내부에 여러개의 subProject가 존재하는 프로젝트의 경우 아래와 같이 build.gradle 파일이 여러개다. 

(서브 프로젝트 들이 모두 같은 빌드로직을 따른다면 여러 개일 필요 없다.)

  1. 전체 프로젝트 build.gradle
  2. 서브 프로젝트 각각의 build.gradle

build.gradle

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
        classpath "org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}"
        classpath "org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}"
    }
}

buildscript

  • buildscript는 gradle로 task를 수행할 때에 사용되는 설정이다. → 소스 컴파일과는 무관한다.
  • buildscript 내에 정의된 dependecies는 task를 사용할 때 사용되는 라이브러리 이며
  • buildscript 밖에서 정의된 dependencies는 소스를 컴파일할 때 등에 사용된다.
  • buildscript는 소스코드 컴파일과 같은 빌드 작업을 시작하기 전에 빌드 시스템 준비 단계에서 제일 먼저 실행된다.
  • buildscript는 gradle 자체를 위한 것으로, gradle이 빌드를 수행하는 방법에 대한 변경을 명시한다.
  • springboot 버전 정보, maven repository 정보, dependency모듈을 지정하여 스프링 부트 플러그인을 사용할 수 있는 기본 바탕을 정의한다.

allprojects

  • gradle에서 빌드하는 모든 모듈을 위한 것이다.
  • 전체 프로젝트에 대한 것 지정
allprojects{
		...
}

project(:서브프로젝트명)

  • 특정  프로젝트에만 해당하는 로직 
project(":ex-api") {
    apply plugin: "java"
    sourceCompatibility = "1.8"
}

repositories

저장소를 의미한다. 어떤 저장소를 사용하는지

  • 각종 프로그램들이 저장되는 위치이다.
  • mavenCentral : apache maven 중앙 저장소를 이용하기 위한 것. 이를 통해 gradle은 중앙 저장소를 그대로 사용할 수 있음 → gradle의 메소드로 repositories내에서 호출해서 사용할 수 있다.

Configurations

apply plugin

  • 확장성있게 설계하기 위해서 특수한 목적을 선언하는 플러그인
  • apply plugin: “java” → java용 웹 프로젝트를 생성한다.
project(":ex-api") {
    apply plugin: "java"
    sourceCompatibility = "1.8"
}

dependencies

외부 라이브러리를 관리하기 위한 블럭

  • compile : 먼저 컴파일 시점에 필요한 의존성
  • implementation : 컴파일과 마찬가지로 사용하려면 컴파일이 필요함. api노출여부와 의존관계 변형에 차이가 있음
    • implementation vs compile
    • grdle버전 7.부터는 compile사용 X → implementation만 사용가능
  • runtime: 런타임 시에 참조할 라이브러리 정의. 기본적으로 compile라이브러리 포함함
  • compileOnly : 컴파일 시점에만 사용하고 런타임에는 필요없는 라이브러리 정의
  • testCompile : 프로젝트의 테스트를 위한 의존성 정의. 기번적으로 compile된 클래스와 compile라이브러리 포함
  • classpath : buildscript 자체가 실행, 사용이 필요할 때는 classpath를 쓰고 프로젝트에 실행할 무언가가 필요한 경우에는 compile, implementation을 써라. → 그러고 보니 buildscript 내의 dependencies에만 classpath로 되어있네
  • developmentOnly
  • annotationProcessor : 주석 프로세서
  • testImplementation : 테스트에 필요한 의존성 
반응형