Apache Maven에 대해서

Apache Maven은 Project Management 도구입니다. Apache Ant를 빌드를 위해서 만들어졌지만 Apache Maven은 프로젝트를 관리를 위해서 만들어졌습니다. Maven 안에는 소스코드 빌드, 테스트, 릴리즈 등의 다양한 기능을 포함하고 있습니다.



  • Apache Maven은 프로젝트 관리 도구이다.
  • Project를 Model로 표현한다. 이것을 POM(Project Object Model)이라고 하며 pom.xml  파일이 POM이다.
  • Apache Maven은 Dependency Management를 통해 Dependency를 추가하고 관리할 수 있다.
  • Project의 Lifecycle Management를 통해 소스코드 빌드, 테스트, 배포, 릴리즈 등의 기능을 제공한다.
  • POM에 Plugin을 추가하여 Maven의 기능을 확장할 수 있다.
  • Maven을 이해하기 위한 핵심은 Lifecycle Management, Dependency Management이다.
  • Maven에서 가장 어려운 것이 Dependency Management이다.
  • Maven은 프로젝트의 디렉토리 구조를 표준화하여 제공한다.





JAR 파일에 MANIFEST.MF 파일 수동으로 지정하기

Maven JAR Plugin을 이용하여 별도로 MANIFEST.MF 파일을 수동으로 지정하기 위해서 다음과 같이 사용할 수 있습니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <archive>
            <index>true</index>
            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
            <manifest>
                <addDefaultImplementationEntries/>
            </manifest>
        </archive>
    </configuration>
</plugin>


Dependency Plugin으로 dependency .jar 파일 복사하기

Maven Dependency Plugin을 이용하면 Maven PM에 추가한 dependency의 모든 .jar 파일을 빌드시 추출할 수 있습니다.

<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>target/lib</outputDirectory>
        <overWriteIfNewer>true</overWriteIfNewer>
    </configuration>
</plugin>

이 방법을 잘 이용하면 .jar 패키징시 dependency 파일들을 .jar 파일 내에 같이 패키징할 수 있습니다. 특히 이 방법은 .war 파일의 /WEB-INF/lib  디렉토리에 .jar 파일을 복사하는 개념과 동일하다고 볼 수 있스빈다.

  • 레이블 없음