빌드 산출물과 버전
4. 응용 변형 예제
4.1 Maven pom.xml 로 버전 한 곳 관리
<project>
<version>1.2.0</version>
<build>
<finalName>app-${project.version}</finalName>
</build>
</project>${project.version} 을 산출물 이름과 매니페스트 양쪽에서 참조하면 <version> 한 줄만 바꿔도 전체가 맞춰집니다.
4.2 Gradle 로 매니페스트 자동 설정
jar {
archiveBaseName = 'app'
archiveVersion = project.version
manifest {
attributes 'Main-Class': 'Main',
'Implementation-Version': project.version
}
}build.gradle 의 jar 태스크에 매니페스트 속성을 직접 지정하는 방식으로, VERSION 파일 대신 project.version 을 씁니다.
4.3 CI 에서 git describe 로 버전 자동 생성
VER=$(git describe --tags --always)
sed -i "s/^version=.*/version=$VER/" gradle.properties태그가 있으면 v1.2.0, 태그 뒤 커밋이 더 있으면 v1.2.0-3-gabc1234 형태가 됩니다. 사람이 버전을 손으로 바꿔 적을 필요가 없습니다.
4.4 체크섬을 릴리스 노트에 첨부
## 다운로드
- app-1.2.0.jar
SHA-256: 229f342724e019e765b2561bc8d15b61c87fd55aa61b40c8b74435754d028a62릴리스 노트에 체크섬을 함께 적어 두면, 내려받은 사람이 sha256sum -c 로 직접 검증할 수 있습니다. 06 레슨의 GitHub Release 작성과 이어집니다.
4.5 Nexus 에 스냅샷과 릴리스 저장소 분리
| 저장소 | 용도 |
|---|---|
app-snapshots |
-SNAPSHOT 버전, 계속 덮어써짐 |
app-releases |
정식 버전, 한 번 올리면 변경 금지 |
개발 중에는 스냅샷 저장소에 자주 올리고, 태그를 찍어 정식 릴리스가 되면 릴리스 저장소로 승격합니다. 릴리스 저장소는 같은 버전을 다시 올리지 못하게 막아 실수로 덮어쓰는 사고를 방지합니다.