Maven으로 Java 빌드 및 테스트하기
Maven으로 Java 빌드 및 테스트하기
GitHub Actions에서 Maven으로 Java 프로젝트를 빌드하고 테스트하는 지속적 통합(CI) 워크플로를 만드는 방법을 알려드릴게요.
출처: 문서
본문
GitHub Actions에서 Maven 소프트웨어 프로젝트 관리 도구를 사용해서 Java 프로젝트에 대한 지속적 통합(CI)을 수행하는 워크플로를 어떻게 만드는지 알아봅니다.
소개
이 가이드는 Maven 소프트웨어 프로젝트 관리 도구를 사용해서 Java 프로젝트에 대한 지속적 통합(CI)을 수행하는 워크플로를 만드는 방법을 보여줍니다. 만든 워크플로를 통해 풀 리퀘스트의 커밋이 기본 브랜치에 대해 빌드나 테스트 실패를 일으키는 시점을 확인할 수 있습니다. 이 접근 방식은 코드가 항상 정상 상태를 유지하는 데 도움이 될 수 있습니다. CI 워크플로를 확장해서 파일을 캐시하고 워크플로 실행에서 아티팩트를 업로드할 수 있습니다.
GitHub 호스팅 러너에는 Java Development Kits(JDK)와 Maven을 포함한 사전 설치된 소프트웨어가 있는 도구 캐시가 있습니다. JDK와 Maven의 소프트웨어 및 사전 설치된 버전 목록은 GitHub-hosted runners를 참고하세요.
사전 요구 사항
YAML과 GitHub Actions 구문에 익숙해야 합니다. 자세한 내용은 다음을 참고하세요:
Java와 Maven 프레임워크에 대한 기본적인 이해를 권장합니다. 자세한 내용은 Maven 문서의 Maven Getting Started Guide를 참고하세요.
Maven 워크플로 템플릿 사용하기
빠르게 시작하려면 저장소의 .github/workflows 디렉터리에 워크플로 템플릿을 추가하세요.
GitHub는 대부분의 Java with Maven 프로젝트에서 작동하는 Maven용 워크플로 템플릿을 제공합니다. 이 가이드의 이후 섹션은 이 워크플로 템플릿을 사용자 지정하는 방법의 예시를 제공합니다.
-
GitHub에서 저장소의 메인 페이지로 이동합니다.
-
저장소 이름 아래에서 Actions를 클릭합니다.

-
저장소에 이미 워크플로가 있다면 New workflow를 클릭합니다.
-
"Choose a workflow" 페이지에 추천 워크플로 템플릿 목록이 표시됩니다. "Java with Maven"을 검색하세요.
-
"Java with Maven" 워크플로에서 Configure를 클릭합니다.
-
필요에 따라 워크플로를 편집합니다. 예를 들어 Java 버전을 변경합니다.
-
Commit changes를 클릭합니다.
maven.yml워크플로 파일이 저장소의.github/workflows디렉터리에 추가됩니다.
Java 버전과 아키텍처 지정하기
워크플로 템플릿은 x64 플랫폼용 OpenJDK 8이 포함되도록 PATH를 설정합니다. 다른 Java 버전을 사용하거나 다른 아키텍처(x64 또는 x86)를 대상으로 하려면 setup-java 액션을 사용해서 다른 Java 런타임 환경을 선택할 수 있습니다.
예를 들어 x64 플랫폼용으로 Adoptium이 제공하는 JDK 11 버전을 사용하려면 setup-java 액션을 사용하고 java-version, distribution, architecture 파라미터를 각각 '11', 'temurin', x64로 구성할 수 있습니다.
steps:
- uses: actions/checkout@v6
- name: Set up JDK 11 for x64
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
architecture: x64
자세한 내용은 setup-java 액션을 참고하세요.
코드 빌드 및 테스트하기
로컬에서 코드를 빌드하고 테스트하는 데 사용하는 것과 같은 명령을 사용할 수 있습니다.
워크플로 템플릿은 기본적으로 package 타겟을 실행합니다. 기본 Maven 구성에서 이 명령은 의존성을 다운로드하고, 클래스를 빌드하고, 테스트를 실행하고, 클래스를 배포 가능한 형식(예: JAR 파일)으로 패키징합니다.
프로젝트를 빌드하는 데 다른 명령을 사용하거나 다른 타겟을 사용하려면 그것들을 지정할 수 있습니다. 예를 들어 pom-ci.xml 파일에 구성된 verify 타겟을 실행하고 싶을 수 있습니다.
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Run the Maven verify phase
run: mvn --batch-mode --update-snapshots verify
의존성 캐싱하기
의존성을 캐시해서 워크플로 실행을 빠르게 할 수 있습니다. 성공적인 실행 후 로컬 Maven 저장소가 캐시에 저장됩니다. 이후 워크플로 실행에서는 캐시가 복원되므로 원격 Maven 저장소에서 의존성을 다운로드할 필요가 없습니다. setup-java 액션을 사용해서 의존성을 간단히 캐시하거나, 사용자 지정 및 고급 구성을 위해 cache 액션을 사용할 수 있습니다.
steps:
- uses: actions/checkout@v6
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn --batch-mode --update-snapshots verify
이 워크플로는 러너 홈 디렉터리의 .m2 디렉터리에 있는 로컬 Maven 저장소의 내용을 저장합니다. 캐시 키는 pom.xml의 해시된 내용이므로 pom.xml의 변경은 캐시를 무효화합니다.
워크플로 데이터를 아티팩트로 패키징하기
빌드가 성공하고 테스트가 통과한 후 결과 Java 패키지를 빌드 아티팩트로 업로드하고 싶을 수 있습니다. 이렇게 하면 빌드된 패키지가 워크플로 실행의 일부로 저장되고 다운로드할 수 있습니다. 아티팩트는 풀 리퀘스트를 머지하기 전에 로컬 환경에서 테스트하고 디버깅하는 데 도움이 될 수 있습니다. 자세한 내용은 Store and share data with workflow artifacts를 참고하세요.
Maven은 일반적으로 JAR, EAR, WAR 같은 출력 파일을 target 디렉터리에 만듭니다. 이를 아티팩트로 업로드하려면 업로드할 아티팩트가 포함된 새 디렉터리에 복사할 수 있습니다. 예를 들어 staging 디렉터리를 만들 수 있습니다. 그런 다음 upload-artifact 액션을 사용해서 해당 디렉터리의 내용을 업로드할 수 있습니다.
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- run: mvn --batch-mode --update-snapshots verify
- run: mkdir staging && cp target/*.jar staging
- uses: actions/upload-artifact@v4
with:
name: Package
path: staging