Java를 배워보자

이클립스에서 Maven 빌드 시 JAR 파일에 의존성 포함하기: Assembly 플러그인 활용 가이드

_Blue_Sky_ 2024. 11. 16. 08:46
728x90
728x90

이클립스에서 Maven 프로젝트를 개발하다 보면, 단순히 컴파일된 클래스 파일만으로는 부족하고, 외부 라이브러리나 자원들을 포함한 실행 가능한 JAR 파일을 만들어야 할 때가 있습니다. 이러한 경우 Maven의 Assembly 플러그인을 사용하면 손쉽게 의존성을 포함한 JAR 파일을 생성할 수 있습니다.

Assembly 플러그인이란?

Assembly 플러그인은 Maven 프로젝트를 패키징하는 강력한 도구입니다. 단순히 컴파일된 클래스 파일뿐만 아니라, 다양한 형식의 파일(예: 설정 파일, 리소스 파일)을 포함하여 배포 가능한 아카이브(JAR, WAR, ZIP 등)를 생성할 수 있습니다. 특히, 의존성 관리에 있어서 뛰어난 기능을 제공하여, 프로젝트에서 사용하는 모든 의존성을 하나의 JAR 파일에 포함시킬 수 있도록 지원합니다.

728x90

Assembly.xml 설정

Assembly 플러그인은 assembly.xml 파일을 통해 상세한 설정을 합니다. 이 파일은 src/main/assembly 디렉토리에 위치하며, 다음과 같은 구조를 가집니다.

<assembly>
  <id>my-assembly</id>
  <formats>
    <format>jar</format>
  </formats>
  <fileSets>
    </fileSets>
  <dependencySets>
    </dependencySets>
</assembly>
  • id: 어셈블리의 고유한 ID
  • formats: 생성할 아카이브 형식 (jar, war, zip 등)
  • fileSets: 포함할 파일이나 디렉토리 설정
  • dependencySets: 의존성 설정

예시:

<assembly>
  <id>jar-with-dependencies</id>
  <formats>
    <format>jar</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
      <outputDirectory>/</outputDirectory>
    </fi=leSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
</assembly>

위 예시는 컴파일된 클래스 파일을 루트 디렉토리에, 런타임 의존성은 lib 디렉토리에 포함하는 JAR 파일을 생성합니다.

pom.xml 설정

Assembly 플러그인을 사용하기 위해서는 pom.xml 파일에 다음과 같이 플러그인을 추가해야 합니다.

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptors>
          <descriptor>src/main/assembly/=assembly.xml</descriptor>
        </descriptors>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
 
 

pom.xml 설정(어셈블리XML포함한 예제:참고)

 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>3.2.2</version>
       <configuration>
         <archive>
           <manifest>
             <mainClass>myfirst.GoogleSearch</mainClass>
           </manifest>
         </archive>
       </configuration>
     </plugin>
     
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-assembly-plugin</artifactId>
       <version>3.3.0</version>
       <configuration>
         <archive>
           <manifest>
             <mainClass>myfirst.GoogleSearch</mainClass>
           </manifest>
         </archive>
         <descriptorRefs>
           <descriptorRef>jar-with-dependencies</descriptorRef>
         </descriptorRefs>
       </configuration>
       <executions>
         <execution>
           <id>make-assembly</id>
           <phase>package</phase>
           <goals>
             <goal>single</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
   </plugins>
 </build>

 

JAR 파일 실행

생성된 JAR 파일은 다음과 같은 명령어를 통해 실행할 수 있습니다.

 
java -jar target/my-project-1.0-SNAPSHOT-jar-with-dependencies.jar

이클립스에서 실행

이클립스에서 Maven Goals 창을 통해 assembly:single 목표를 실행하면 JAR 파일이 생성됩니다. 생성된 JAR 파일은 target 디렉토리에서 확인할 수 있습니다.

추가 팁

  • 다양한 파일 형식: Assembly 플러그인은 JAR 파일뿐만 아니라, WAR, ZIP 등 다양한 형식의 아카이브를 생성할 수 있습니다.
  • 복잡한 설정: Assembly.xml 파일을 통해 매우 복잡한 패키징 설정을 할 수 있습니다.
  • 플러그인 설정: pom.xml 파일에서 플러그인 설정을 통해 다양한 옵션을 커스터마이징할 수 있습니다.
728x90

Assembly 플러그인은 Maven 프로젝트를 패키징하는 강력한 도구입니다. 의존성을 포함한 실행 가능한 JAR 파일을 생성하는 것은 물론, 다양한 형식의 아카이브를 생성하고 복잡한 패키징 설정을 할 수 있습니다. 이클립스와 함께 사용하면 더욱 편리하게 Maven 프로젝트를 관리할 수 있습니다.

 

728x90
728x90