서론
요즘 즐겁게 스프링 배치 개발을 하고 있다.
젠킨스로 프로젝트 환경을 세팅하면서 알게된 사실들을 정리해본다.
settings 이놈이 먼저
이 파일은 프로젝트 빌드시 가장 먼저, 1개 프로젝트당 딱 1개만 읽는다.
그래서 여러개의 settings.gradle 을 사용하면 멀티 프로젝트 (예를 들어, 1개의 git repository 에서 여러개의 프로젝트) 를 설정할 수 있다.
가장 기본적으로 spring starter 에서 다운로드를 받으면,
rootProject.name="프로젝트이름" 한 줄만 작성되어있다.
나와 같이 폐쇄망에선 다른 것을 설정해줘야한다. 자세한 것은 후술하겠다.
build.gradle 이 근본이긴 해
이 파일에 대부분 로직이 들어있다.
build.gradle 작성은 순서가 있다.
- 플러그인 선언
대부분의 경우, plugins 블록은 build.gradle 파일의 맨 위에 위치합니다. 이는 선언된 플러그인이 다른 설정에 영향을 줄 수 있기 때문입니다. 예를 들어, Java 플러그인을 적용하면 java 소스 세트와 컴파일 태스크가 자동으로 생성됩니다.
plugins {
id 'java'
}
- 그룹 및 버전 정보
프로젝트의 그룹 ID, 버전과 같은 정보는 플러그인 선언 바로 아래에 위치하는 것이 일반적입니다.
group = 'com.example'
version = '0.1.0'
- 리포지토리 설정
의존성을 해결하거나 플러그인을 다운로드하기 위한 리포지토리 설정입니다. Maven Central, JCenter, 또는 회사 내부 리포지토리 등을 지정할 수 있습니다.
repositories {
mavenCentral()
}
- 의존성 선언
프로젝트가 의존하는 외부 라이브러리를 선언합니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
- 태스크 및 기타 설정
사용자 정의 태스크, 플러그인에 대한 추가 설정, 컴파일 옵션 등은 이후에 위치합니다.
문제점
플러그인을 다룰 때 인터넷 연결이 필요하다.
플러그인 선언 시, 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 옵션으로 프로파일을 정할 수 있게 되었답니다~☆
(만약 더 좋은 방법이 있다면 공유해주세용)
'개발 > java' 카테고리의 다른 글
중복 맞이 중복코드 최소화 (0) | 2024.07.25 |
---|---|
Spring Batch + MSSQL 실행과정 FLOW 파헤치기, meta db 접근순서 (3) | 2024.04.29 |
Spring Actuator 로 Custom Endpoint 등록 및 변수 전달 (0) | 2024.03.19 |
포장을 못하면 개발을 못해요 (API 유지보수성 극대화) (0) | 2021.06.10 |
Java Map, HashMap 정렬, 순서가 필요할 때 : LinkedHashMap (0) | 2021.02.16 |