Maven을 사용하여 종속성이 있는 실행 가능한 JAR 만들기

Maven을 사용하여 종속성이 있는 실행 가능한 JAR 만들기
Maven을 사용하여 종속성이 있는 실행 가능한 JAR 만들기

Maven 프로젝트를 단일 실행 가능한 JAR로 패키징

Java 프로젝트로 작업할 때 쉬운 배포를 위해 애플리케이션을 단일 실행 가능 JAR 파일로 패키징해야 하는 경우가 많습니다. 강력한 빌드 자동화 도구인 Maven을 사용하면 개발자는 이 단일 출력 JAR에 필요한 모든 종속성을 포함할 수 있습니다.

이 기사에서는 모든 종속성 JAR을 최종 실행 가능 JAR에 포함하도록 Maven 프로젝트를 구성하는 데 필요한 단계를 안내합니다. 이러한 지침을 따르면 배포 프로세스가 단순화되고 애플리케이션이 다양한 환경에서 원활하게 실행되도록 할 수 있습니다.

명령 설명
<plugin> 빌드 프로세스 중에 사용할 Maven 플러그인을 정의합니다. 플러그인은 코드 컴파일이나 프로젝트 패키징과 같은 특정 작업을 실행할 수 있습니다.
<groupId> Maven 프로젝트의 그룹 식별자(일반적으로 역방향 도메인 이름)를 지정합니다.
<artifactId> 프로젝트 이름인 아티팩트의 식별자를 정의합니다.
<version> 프로젝트의 현재 버전을 나타냅니다.
<build> 플러그인 및 리소스를 포함하여 프로젝트의 빌드 구성이 포함되어 있습니다.
<descriptorRef> "jar-with-dependent"와 같이 사용할 Maven 어셈블리 플러그인에 대해 미리 정의된 설명자를 참조합니다.
<mainClass> JAR 파일이 실행될 때 실행될 기본 클래스를 지정합니다.
<execution> 플러그인 내에서 실행 블록을 정의하여 다양한 빌드 단계에서 수행할 작업을 지정합니다.
mvn clean package 프로젝트를 정리하고 모든 종속성을 포함하여 JAR 파일로 패키지하는 명령입니다.
java -jar target/...jar JAR 경로를 지정하여 생성된 JAR 파일을 실행하는 명령입니다.

Maven을 사용하여 실행 가능한 JAR 생성 및 실행

위에 제공된 스크립트는 모든 종속성을 단일 실행 가능한 JAR 파일로 패키지하도록 Maven 프로젝트를 구성하는 방법을 보여줍니다. 첫 번째 스크립트는 Maven입니다. pom.xml 프로젝트 구성이 포함된 파일입니다. 이 파일 내에서는 <plugin> 태그는 Maven 어셈블리 플러그인을 정의하는 데 사용됩니다. 이 플러그인은 모든 종속성을 포함하는 실행 가능한 JAR을 생성하는 데 중요합니다. 그만큼 <descriptorRefs> 플러그인 구성 내의 태그는 모든 프로젝트의 종속성이 최종 JAR 파일에 패키징되도록 보장하는 설명자입니다. 그만큼 <mainClass> 태그 안에 <manifest> 섹션은 JAR이 실행될 때 실행할 기본 메소드가 포함된 클래스를 Maven에게 알려주기 때문에 필수적입니다.

그만큼 <execution> 플러그인 구성 내부의 블록은 작업이 발생하는 곳입니다. 플러그인의 목표를 지정합니다. single 기간 동안 실행되어야 한다. package 빌드 라이프사이클의 단계. 이것이 종속성이 있는 JAR 파일 생성을 트리거하는 것입니다. 두 번째 스크립트는 간단한 명령줄 지침입니다. mvn clean package. 이 명령은 프로젝트를 정리하고(이전 빌드 아티팩트 제거), 소스 코드를 컴파일하고, 테스트를 실행하고, 프로젝트를 JAR 파일로 패키징합니다. 최종 JAR 파일은 다음 위치에 있습니다. target 프로젝트 디렉토리에 따라 이름이 지정됩니다. artifactId 그리고 version 에 지정된 pom.xml.

Maven을 사용하여 종속성이 있는 실행 가능한 JAR 파일 만들기

메이븐 구성 스크립트

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.example.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Maven 명령을 실행하여 JAR 패키징

명령줄 지침

mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar

# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included

패키징 종속성을 위한 고급 Maven 기술

Maven을 사용하여 실행 가능한 JAR을 생성하기 위한 기본 구성 외에도 빌드 프로세스를 향상할 수 있는 추가 기술이 있습니다. 그러한 기술 중 하나는 shade 플러그인 대신 assembly 플러그인. Maven Shade 플러그인은 uber-JAR(종속성이 포함된 JAR) 생성을 위한 고급 기능을 제공합니다. 이를 통해 클래스 경로 충돌을 방지하기 위해 패키지 이름을 바꿀 수 있으며 중복 클래스 및 리소스에 대한 더 나은 처리 기능을 제공합니다. 또한 최종 JAR에 포함되는 종속성을 세부적으로 제어할 수 있습니다.

또 다른 중요한 측면은 JAR 파일의 크기를 관리하는 것입니다. 대용량 JAR 파일은 번거롭고 전송이나 로드 속도가 느릴 수 있습니다. 그만큼 maven-shade-plugin 불필요한 파일과 클래스를 제외하여 최종 JAR의 크기를 줄여 이를 수행하는 데 도움이 될 수 있습니다. 또한 사용되지 않는 클래스나 중복 리소스 등 필수적이지 않은 정보를 제거하여 JAR을 최소화하도록 플러그인을 구성할 수도 있습니다. 이러한 고급 구성은 종속성이 많은 대규모 프로젝트에서 작업할 때 특히 유용할 수 있습니다.

Maven 실행 가능 JAR에 대한 일반적인 질문 및 솔루션

  1. 내 JAR에서 기본 클래스를 어떻게 지정합니까?
  2. 다음을 사용하여 기본 클래스를 지정할 수 있습니다. <mainClass> 내의 태그 <manifest> Maven 플러그인 구성 섹션.
  3. 최종 JAR에서 특정 종속성을 어떻게 제외할 수 있나요?
  4. 사용 excludes 최종 JAR에 포함되어서는 안되는 종속성을 지정하려면 플러그인 구성 내의 태그를 사용하세요.
  5. uber-JAR이란 무엇입니까?
  6. uber-JAR은 컴파일된 코드뿐만 아니라 해당 코드의 모든 종속성을 포함하는 JAR 파일입니다.
  7. 내 JAR에서 클래스 경로 충돌을 어떻게 방지할 수 있나요?
  8. 그만큼 maven-shade-plugin 충돌을 피하기 위해 종속성 내의 패키지 이름을 바꿀 수 있습니다.
  9. 종속성에서 중복 클래스를 어떻게 처리합니까?
  10. 구성 maven-shade-plugin 최종 JAR에서 중복을 처리하는 방법을 지정하여 중복 클래스 및 리소스를 관리합니다.
  11. 종속성에서 특정 파일만 포함할 수 있나요?
  12. 예, 다음을 구성할 수 있습니다. maven-assembly-plugin 또는 maven-shade-plugin 종속성에서 특정 파일만 포함합니다.
  13. 패키지된 JAR을 어떻게 실행하나요?
  14. 사용 java -jar 명령 뒤에 JAR 파일 경로가 옵니다.
  15. 내 JAR 파일의 내용을 어떻게 확인할 수 있나요?
  16. 당신은 사용할 수 있습니다 jar -tf JAR 파일의 내용을 나열하는 명령입니다.
  17. JAR 파일이 너무 크면 어떻게 되나요?
  18. 사용 maven-shade-plugin 불필요한 파일을 제외하고 JAR 크기를 최소화합니다.

Maven 실행 파일 JAR에 대한 결론

Maven을 사용하여 종속성이 있는 실행 가능한 JAR을 생성하면 Java 애플리케이션의 배포 프로세스가 단순화됩니다. 적절하게 구성함으로써 pom.xml Maven Assembly Plugin 또는 Maven Shade Plugin과 같은 플러그인을 활용하여 개발자는 필요한 모든 종속성을 단일 JAR 파일로 패키징할 수 있습니다. 이 접근 방식을 사용하면 애플리케이션이 다양한 환경에서 원활하게 실행될 수 있으므로 배포 및 실행이 간단해집니다. 다음 단계를 따르면 프로젝트의 종속성을 효과적으로 관리하고 안정적이고 실행 가능한 JAR 파일을 만드는 데 도움이 됩니다.