빌드 산출물과 버전
6. 연습 문제
문제 1. VERSION 파일로 매니페스트 채우기
VERSION 파일에 2.0.1 이 들어 있습니다. 이 값을 읽어 Implementation-Version 에 넣고 dist/app-2.0.1.jar 를 만드는 명령을 쓰세요(클래스는 out/ 에 있음).
VER=$(cat VERSION)
printf 'Implementation-Version: %s\n' "$VER" > MANIFEST.MF
jar --create --file "dist/app-$VER.jar" \
--main-class Main --manifest=MANIFEST.MF -C out .cat VERSION 으로 읽은 값을 매니페스트와 파일 이름 양쪽에 그대로 재사용합니다.
문제 2. 매니페스트 속성 확인
이미 만든 app.jar 안의 Main-Class 와 Implementation-Version 값을 확인하는 명령을 쓰세요.
jar xf app.jar META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF압축을 풀지 않고 매니페스트 항목 하나만 꺼내 바로 내용을 확인할 수 있습니다.
문제 3. 재현 가능한 빌드로 만들기
같은 소스를 몇 번 빌드해도 항상 같은 해시가 나오게 하려면 jar --create 에 어떤 옵션을 추가해야 하는지, 옵션과 예시 값을 함께 쓰세요.
jar --create --file app.jar --main-class Main \
--date=2026-01-05T09:00:00+09:00 -C out .--date 로 모든 항목의 타임스탬프를 고정하면 빌드 시각이 결과에 섞이지 않습니다.
문제 4. 체크섬 생성과 검증
app.jar 의 체크섬 파일을 만들고, 그 파일로 무결성을 검증하는 명령 두 개를 쓰세요.
sha256sum app.jar > app.jar.sha256
sha256sum -c app.jar.sha256두 번째 명령이 OK 를 출력하면 파일이 손상되지 않았다는 뜻입니다.
문제 5. 산출물 이름 규칙 적용
프로젝트 이름이 app, 버전이 2.0.1 일 때 산출물 jar 파일과 체크섬 파일의 이름을 규칙에 맞게 쓰세요.
app-2.0.1.jar
app-2.0.1.jar.sha256<이름>-<버전> 형식을 지키면 여러 버전이 같은 폴더에 있어도 서로 덮어쓰지 않습니다.