Maven 으로 생성된 프로젝트에서 build (package ) 또는 test goal 을 수행하면 몇가지 문제에 당면하게 된다.


1. Maven build (package) 시 JUnit 테스트 수행하기

Maven build 수행시에 pom.xml 에 아무 설정을 하지 않으면 Junit 테스트들이 실패하는 경우가 있다.

아래 페이지에서 Maven package 의 lifecycle 을 살펴보면 test 에 대해서 surefire:test 을 수행하는 것을 볼 수 있다. 그래서 surefire plugin 을 사용해야하고 이 정보를 pom.xml 에 추가해준다. 실패하던 테스트들이 잘 수행된다.


http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Packaging


    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.3</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.12.3</version>
                    </dependency>
                </dependencies>
            </plugin>



2. Maven build ( package ) 시 JUnit 에 사용하는 log4j 설정파일 지정하기

Maven package 수행시에 라이프사이클을 살펴보면 process-resources 이 가장 먼저 수행이 됨을 알 수 있다.

만약 log4j 의 설정을 개발 환경에서는 console 로 출력 service 에서는 logfile 로 출력 이라고 필터로 설정이 되어 있다면 package 시에 테스트보다 process-resource 가 먼저 수행이 되어서 log4j 설정이 서비스 환경으로 세팅되게 된다.

그렇다면 test 에서 로그를 찍으려고 보니 logfile 이 없다는 둥의 오류가 발생할 수 있다.

이를 대비 하기 위해서 surefire 의 config 로 테스트용 log4j 설정파일을 기입해두면 surefire 가 JUnit 테스트를 수행하면서 해당 log4j 설정파일을 읽어서 수행을 하게 된다.


<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.3</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.12.3</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <systemPropertyVariables>
                        <log4j.configuration>log4j-test.properties</log4j.configuration>
                    </systemPropertyVariables>
                </configuration>

</plugin>