본문 바로가기

개발/java

build.gradle, settings.gradle, properties 차이? 역할? 알아보기

서론

요즘 즐겁게 스프링 배치 개발을 하고 있다.

젠킨스로 프로젝트 환경을 세팅하면서 알게된 사실들을 정리해본다.


settings 이놈이 먼저

이 파일은 프로젝트 빌드시 가장 먼저, 1개 프로젝트당 딱 1개만 읽는다.

그래서 여러개의 settings.gradle 을 사용하면 멀티 프로젝트 (예를 들어, 1개의 git repository 에서 여러개의 프로젝트) 를 설정할 수 있다.

가장 기본적으로 spring starter 에서 다운로드를 받으면,

rootProject.name="프로젝트이름" 한 줄만 작성되어있다.

나와 같이 폐쇄망에선 다른 것을 설정해줘야한다. 자세한 것은 후술하겠다.


build.gradle 이 근본이긴 해

이 파일에 대부분 로직이 들어있다.

build.gradle 작성은 순서가 있다.

  1. 플러그인 선언

대부분의 경우, plugins 블록은 build.gradle 파일의 맨 위에 위치합니다. 이는 선언된 플러그인이 다른 설정에 영향을 줄 수 있기 때문입니다. 예를 들어, Java 플러그인을 적용하면 java 소스 세트와 컴파일 태스크가 자동으로 생성됩니다.

plugins {
    id 'java'
}
  1. 그룹 및 버전 정보

프로젝트의 그룹 ID, 버전과 같은 정보는 플러그인 선언 바로 아래에 위치하는 것이 일반적입니다.

group = 'com.example'
version = '0.1.0'
  1. 리포지토리 설정

의존성을 해결하거나 플러그인을 다운로드하기 위한 리포지토리 설정입니다. Maven Central, JCenter, 또는 회사 내부 리포지토리 등을 지정할 수 있습니다.

repositories {
    mavenCentral()
}
  1. 의존성 선언

프로젝트가 의존하는 외부 라이브러리를 선언합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}
  1. 태스크 및 기타 설정

사용자 정의 태스크, 플러그인에 대한 추가 설정, 컴파일 옵션 등은 이후에 위치합니다.


문제점

플러그인을 다룰 때 인터넷 연결이 필요하다.
플러그인 선언 시, Gradle은 해당 플러그인을 다운로드하기 위해 인터넷에 접속해야 한다. 따라서 처음 플러그인을 적용할 때는 인터넷 연결이 필수적이다. 하지만, 한 번 다운로드된 플러그인은 로컬 캐시에 저장되므로, 이후에는 오프라인 상태에서도 해당 플러그인을 사용할 수 있다.

오프라인 작업을 위해 Gradle이 이미 다운로드한 플러그인과 의존성을 사용하도록 강제하려면, 커맨드 라인에서 --offline 옵션을 사용할 수 있긴 하다. 그러면 로컬 캐시를 사용한다.

gradle build --offline

아무튼 그래서 우리와 같이 자사 maven repository 를 설정한 상태라면, settings.gradle 에 repository주소를 명시해야한다.

근데 문제는, 보통 project.properties 를 설정해서 profile 을 설정하는데, settings.gradle 이 읽힐때는 아직 project 속성이 정의되지 않을 때이다.

그래서 gradle -Pmyprop=dev 와 같이 -P 옵션으로 프로퍼티 정의를 하는 것은 settings.gradle 는 읽을 수 없다.

-D 옵션으로 jvm 에 설정값을 정의하는 것은 유효하다.

pluginManagement{
    repositories {
        if(System.getProperty('env') == 'dev') {
            maven { url 'http://maven.repo.com/what/ever'} 
        } else ...
    }

결론

모든 프로젝트 관련 설정은 build.gradle 에서 관리하는 것이 일반적이다.

settings.gradle까지 조건문이 들어가고 분기처리 되는 것이 일반적이지 않다고 결론지어,

각 컴퓨터의 /etc/hosts 에 ip와 도메인을 입력하여

repository를 도메인처리 하기로 결론지었다.

이제 자유롭게 gradle -Pprofile=dev 옵션으로 프로파일을 정할 수 있게 되었답니다~☆

(만약 더 좋은 방법이 있다면 공유해주세용)

반응형