Maven 입문 | 그밖에 | package 시에 library 포함시키기


package를 실행 할 시에 war 프로젝트는 따로 명시를 해주지 않아도 WEB-INF/lib에 dependency 라이브러리 파일을 복사해서 포함을 시켜준다. 이에 반해 jar 프로젝트는 따로 명시를 해 주지 않으면 포함이 되지 않는다.

포함해서 package를 해야 하는 경우라면 아래와 같이 하면 된다.

특정 디렉토리에 dependency 라이브러리 파일들 복사하기

Maven Dependency Plugin에 dependency:copy-dependencies Goal을 실행해 주면 {프로젝트}/target/dependency 디렉토리에 dependency가 jar 라이브러리 파일을 복사해 준다.

mvn dependency:copy-dependencies

그런데 package에 포함이 되는 경우라면 매번 복사해 주는 일이 번거러울 수 있고, 특정 디렉토리에 복사를 하고 싶은 경우도 있다. package 명령을 실행 할 시에 자동으로 dependency 파일을 특정 디렉토리로 복사하도록 pom.xml에 명시 해 줄수도 있다.

<project>
   <build>
    <plugins>
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
          <version>2.3</version>
          <executions>
              <execution>
             <id>copy-dependencies</id>
              <phase>package</phase>
              <goals>
               <goal>copy-dependencies</goal>
              </goals>
            </execution>
          </executions>
         <configuration>
            <outputDirectory>../../${lib.dir}</outputDirectory>
             <overWriteIfNewer>true</overWriteIfNewer>
          </configuration>
        </plugin>
      </plugins>
    </build>
</project>

패키지 파일에 dependency 라이브러리 파일들 포함하기

생성하는 package에 dependency 파일을 모두 포함해서 1개의 package 파일을 생성하는 방법도 있다. 이 방법은 필요한 의존성 파일이 모든 포함이 되어 있기 때문에 별도의 classpath 설정 없이 패키지 파일 1개만 있어도 실행이 가능하다.

먼저, pom.xml 파일에 Maven Assembly Plugin 을 추가한다.

<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2.1</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

그러고 assembly:assembly Goal을 실행시키면 target 경로에 jar 파일이 2개 생성된다. 하나는 dependency가 없는 파일이고, 하나는 dependency가 포함된 파일이다.

mvn assembly:assembly

파일으로 알수 있듯이 “-jar-with-dependencies"가 붙어 있는 파일이 dependency가 포함된 파일이다.

  • xxx-1.0.0-SNAPSHOT.jar
  • xxx-1.0.0-SNAPSHOT-jar-with-dependencies.jar

참조