하나의 프로젝트 내부에 여러개의 subProject가 존재하는 프로젝트의 경우 아래와 같이 build.gradle 파일이 여러개다.
(서브 프로젝트 들이 모두 같은 빌드로직을 따른다면 여러 개일 필요 없다.)
- 전체 프로젝트 build.gradle
- 서브 프로젝트 각각의 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 : 테스트에 필요한 의존성
반응형
'서버 > SpringBoot' 카테고리의 다른 글
스프링부트가 다중 유저 요청을 처리하는 방법 (Thread Pool, Thread Safe) (0) | 2022.11.25 |
---|---|
[Spring/Kotlin] Entity는 data class로 구현하는게 좋을까? (0) | 2022.05.15 |
[kotlin] spring jpa에서 복합키를 사용하는 방법, @EmbeddedId, @IdClass (0) | 2022.05.10 |
@RequestBody로 지정한 객체에 꼭 기본 생성자가 필요할까? (com.fasterxml.jackson.databind.exc.InvalidDefinitionException) (2) | 2022.01.05 |
[Spring] EHcache를 이용해 캐시 간단하게 적용하기 (feat. @ Cacheable) (0) | 2022.01.05 |