Resources

process-resource는 간단하게, src/main/resources 디렉터리에 있는 파일들을 복사하여 target/classes 디렉터리에 복사한다고 생각할 수 있습니다. 이때, ${...}를 텍스트로 대체할 수 있는 필터를 사용할 수 있습니다.

예를들어, src/main/resources/META-INF/service.xml 이 다음과 같을 때..

<service>
  <!-- This URL was set by project version ${project.version} -->
  <url>${jdbc.url}</url>
  <user>${jdbc.username}</user>
  <password>${jdbc.password}</password>
</service>

src/main/filters/default.properties 파일에 그 값들을 외부로 빼낼 수 있습니다.

jdbc.url=jdbc:hsqldb:mem:mydb
jdbc.username=sa
jdbc.password=

이 두개의 파일을 다음과 같이 설정하여 사용할 수 있습니다.

<build>
  <filters>
    <filter>src/main/filters/default.properties</filter>
  </filters>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

POM에 프로퍼티 파일에 명시했던 값들을 설정하면, 프로퍼티 파일을 사용하지 않을 수도 있다고 합니다.

Compile

컴파일 할 자바 버전을 명시할 수 있습니다. 기본으로 JDK 1.3 호환 코드로 컴파일 것으로 가정하기 때문에, 다음과 같이 명시적으로 사용할 버전을 설정해주어야 합니다.

<project>
  ...
  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>


Test Resource

process-test-resource는 process-resource와 거의 같습니다. 차이가 있다면 POM에 testResources 엘리먼트 내부에 testResouce 엘리먼트로 정의해둔 Test Resource들을 target/test-classes에 복사합니다.

Test

이 Phase는 surefire:test Goal과 연관되어있습니다. Surefire는 *Test.java로 끝나는 파일들을 기본으로 실행합니다. 물론 별도로 설정할 수도 있는데, Appendix A에서 다룹니다. JUnit을 기본 테스트 프레임워크로 기대하고 있지만, TestNG를 다음과 같이 설정할 수도 있습니다.

<dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>4.7</version>
      <scope>test</scope>
      <classifier>jdk14</classifier>
</dependency>