티스토리 뷰
build.gradle 에는 개발중인 프로젝트의 버전이 존재합니다. 이런 버전을 외부에 공개하거나 전역변수로 사용하는 것은 어렵습니다. 구글링을 진행하여도 버전을 파일로 떨구는 방법만이 있을 뿐, 실제로 적용한 사람은 없었습니다.
그래서 오늘은 build.gradle 에 저장된 project.version 을 외부로 빼내어 실제 자바 코드에서 사용하는 방법을 적어보려 합니다.
1. build.gradle 세팅하기
가장 먼저 build.gradle 의 변수로 생성된 version 값을 추출해야 하고, 그 문법을 알아야 합니다. gradle은 Java 언어와 호환이 가능하기 때문에 Java 문법을 그대로 사용합니다.
println "$project.version"
println 은 gradle 내의 변수를 표시하는데 좋은 방법 중 하나입니다. println 으로 전역으로 생성된 변수가 잘 출력되는지 확인합니다.
저 같은 경우 DDD 방식으로 프로젝트를 개발하기 때문에 도메인으로 이루어진 패키지가 따로 있고, 다른 모듈 패키지들이 도메인 패키지를 상속받는 구조로 되어 있습니다. 그래서 기존에 짜여진 build.gradle 내의 내용은 아래와 같습니다.
allprojects {
group = 'groupname'
version = '2.41.2'
java.sourceCompatibility = '16'
java.targetCompatibility = '16'
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
}
println $project.version // 2.41.2
그리고 이제 이렇게 된 내용을 ./gradlew build 를 통하여 표시해줍니다.
✏️ ./gradlew build
> Configure project :
2.41.2
근데 터미널로 아래와 같은 명령어로도 버전을 표시해줄 수 있습니다. 하지만 이 부분은 젠킨스나 다른 서버에서 사용하는 명령어이므로 ㅐ스합니다.
./gradlew properties | grep ^version: | awk '{print $2}'
2. build.gradle 을 이용하여 파일 뽑아내기
다음으로 위의 명령어를 사용하고 이를 전역변수에 주입시키고자 여러 시도를 해봤지만, 자바의 영역에서 build.gradle에 표시된 내용을 가져오는 방법은 어려웠습니다. 그래서 어떻게 할지 고민을 하다가 이전에 properties 파일로 출력할 수 있는 방법을 생각해내었습니다.
create version.txt file in project dir via build.gradle task
Apologies in advance for my ignorance. I'm very new to gradle. My is goal is to have some task in my build.gradle file, wherein a file 'version.txt' is created in my project directory whenever I r...
stackoverflow.com
파일로 build.gradle 내의 version 을 추출하는 방법은 위의 글을 참조하여 작성하게 되었습니다. 이제 여기서 추출하는 방법은 아래에 적어두었습니다.
task versionTxt() {
doLast {
new File($projectDir, "version.txt").text = """
Version: $version
Revision: ${grgit.head().abbreviatedId}
Buildtime: ${new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(new Date())}
Application-name: foobarbaz app
"""
}
}
가장 먼저 task 로 선언이 되어 있는 내용은 function, public void 와 같은 함수 또는 메소드 키워드입니다. versionTxt이 함수 명이 되고, 괄호 안에 내용이 파라미터로 사용할 수 있습니다.
doLast 는 사용하여도 되고, 사용하지 않아도 되지만 기본적으로 내부에 있는 gradle script 를 먼저 실행 후 제일 마지막에 실행되는 내용입니다.
java에서도 File을 생성하는 기초 문법인 new File을 사용하여 생성자를 만들었습니다. $projectDir 은 전역 변수로 /Users/niyong/project/gradleproject 에 build.gradle 파일이 존재한다면 /Users/niyong/project 까지를 의미합니다.
"version.txt" 는 파일명을 의미합니다. 저는 여기에서 파일을 *.properties 로 빼주기 위해 'version.properties' 로 설정했습니다.
text = 로는 파일 내의 데이터를 기록하게 됩니다. 여기에 버전 정보가 들어가고 """ 은 String template 로 Kotlin 문법입니다. 내부에 문자열을 전부 작성할 수 있습니다. 파라미터 또는 변수는 ${param} 의 형태로 사용할 수 있습니다. 예) ${grgit.head()}
이제 여기에 버전 정보를 입력하고, 버전 정보를 'version.properties' 까지 입력할 수 있는 내용을 담아두면 build.gradle 에서의 세팅은 끝납니다.
allprojects {
group = 'gradleproejct'
version = '2.41.2' // 버전의 정보를 바꿀 때 이 버전값만 바꿉니다.
java.sourceCompatibility = '16'
java.targetCompatibility = '16'
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
}
// println "$project.version"
// 아래에 변수를 선언해줍니다.
var adminDir = "$projectDir/admin/src/main/resources"
// new File 문법을 사용하여 파일을 생성해줍니다.
new File(adminDir, "version.properties").text = """
project.version=$project.version
"""
위에 작성한 코드는 실제 사용한 코드입니다. 이제 버전이 바꾸니느 경우 allproject.version = 의 정보만 바꿔주면 됩니다.
3. version.properties 의 정보 불러오기
이제 Java의 영역으로 넘어가서 Version 정보를 가져올 수 있는 코드를 작성해보려 합니다.
3-1. 메인 함수에 소스를 붙입니다.
@PropertySource("classpath:version.properties")
이 어노테이션은 version.properties 를 properties 파일로 사용하기 위한 세팅과정입니다.
3-2. 전역으로 사용하기 위한 @ControllerAdvice 클래스 만들기
@ControllerAdvice
@Slf4j
@RequiredArgsConstructor
public class AdminControllerAdvice {
@Value("${project.version}")
private String version;
@ModelAttribute("appVersion")
public String getVersion() {
final String appVersion1 = this.version;
return "v" + version;
}
}
위와 같이 ControllerAdvice 내용을 작성해줍니다. 이렇게 되면 thymeleaf 를 사용하는 모든 페이지에서 ${appVersion} 이라는 변수만으로 화면에 출력이 가능합니다.
<span th:text="${appVersion}"></span>
아래 글은 제가 작성한 글이고, thymeleaf 를 사용하는 방법을 표시하였습니다.
build.gradle 에서 application.properties 값 사용하는 방법
이번 글에서는 build.gradle 파일에서 *.properties에 선언된 값을 가져올 수 있는 방법이 없을지 고민해보다가 찾은 방법을 공유하도록 하겠습니다. build.gradle 내에 아래와 같이 추가합니다. 방법1 def P
abbo.tistory.com
'Server' 카테고리의 다른 글
[Refactor] 자바 코드 리팩터링하기 - 2부 (0) | 2023.01.26 |
---|---|
[Refactor] 자바 코드 리팩터링하기 - 1부 (0) | 2023.01.25 |
[Java] 자바 19 에서 달라진 점 코드로 확인하기 (0) | 2022.12.29 |
[Spring] Redis 실제 사용해보기 (0) | 2022.12.16 |
[Spring] Redis와 부가 어노테이션 설정하기 (0) | 2022.12.16 |
[Spring] 캐시의 추상화와 사용법 (@Cacheable, @CachePut, @CacheEvict) (0) | 2022.12.16 |