공부/프로그래밍

[maven] install 시 class 파일이 생성되지 않을 때

demonic_ 2018. 11. 28. 07:39

빌링 자동화를 하려고 maven으로 구성되어 있는 프로젝트를 젠킨스에 등록했다.

그런데 maven install 을 할 때 마다 src/main/java 폴더안에 자바파일이 컴파일이 되지 않는 문제가 생겼다.

그래서 한참 찾아보고 수정해봐도 안되어서 설정을 하나하나 뜯어보며 해두었고 마침내 성공했다.

그것에 대해 정리해두려 한다


maven install 을 실행하면 target 에 다음과 같이 파일이 생성된다.



classes 에 보면 resources 안의 내용만 들어있을 뿐, java 가 컴파일된 결과는 보이지 않았다.


여러 수행착오를 겪은 결과 maven-compiler-plugin 설정이 문제였다.

maven-compiler-plugin 를 올바르게 설정하면 해결된다.

여기서 올바르게라는건 다음의 문제가 없는지 점검이 필요하다는 의미다.



- 폴더구성이 제대로 되어있는지 확인하자


maven의 기본 폴더구성은 다음과 같다.


src/main/java

src/main/resource

src/test/java

src/test/resource


만약 위의 경로를 바꿨다면 maven에 추가설정을 해야한다.(기본설정 추천)



-  외부 연동으로 인해 제공받은 jar 파일이 maven 에 등록되어 있는지 확인


개인적으로 다수의 프로젝트를 경험해본 결과, 외부 JAR 파일의 경우 이클립스나  intellij 등에 add library 로 등록하여 로컬설쩡하여 개발하는 경우가 많았다. 메이븐에서는 이같은것을 모두 등록해주어야 한다. 그러지 않으면 컴파일 하는동안 해당 파일을 참조하는 클래스에서 빌드 에러가 난다.


[ERROR] /Users/astrology/git/membership-was-bak/src/main/java/com/project/service/kicc/PaymentGatewayService.java:[23,16] package com.kicc does not exist

[ERROR] /Users/astrology/git/mamembership-was-bak/src/main/java/com/project/service/kicc/PGBaseSet.java:[12,16] package com.kicc does not exist


처음에는 이 에러를 단순하게 생각해 maven-compiler-plugin 의 설정을 지웠다. 그러다보니 install 실행시 에러없이 잘 넘어갔지만 target 폴더에 보면 java 컴파일이 안되어 있었다. maven compile 을 실행하지 않았기 때문이다.. 컴파일러가 실행되지 않으니 당연히 class파일이 생성되지 않는다.


이쯤에서 maven 라이프사이클에 대해 알아둘 필요가 있겠다.



- maven 라이프사이클


+ compile: 소스 코드를 컴파일한다

+ test: 단위 테스트를 실행한다

+ package: 컴파일된 클래스 파일과 리소스 파일을 war 나 jar 파일로 패키징한다

+ install: 패킺징한 파일을 로컬저장소에 배포한다( USER_HOME/.m2/)

+ deploy: 패키징한 파일을 원격 저장소에 배포한다(nexus 또는 maven central 저장소)


위와 같은 라이프사이클에서 컴파일이 빠졌으니 class가 되지 않았던 문제다. 그래서 로컬에 있는 것을 maven에 등록한 후 plugin 에 compile 을 등록했다.


pom.xml 파일 수정

1. 로컬 jar 파일 등록


<properties>

...

<project.lib.path>${project.basedir}/src/main/webapp/WEB-INF/lib</project.lib.path>

</properties>

<dependencies>

<dependency>

<groupId>com.kicc</groupId>

<artifactId>easypay</artifactId>

<version>1.0</version>

<scope>system</scope>

<systemPath>${project.lib.path}/easypay_java_client17(utf-8).jar</systemPath>

</dependency>

...

</dependencies>

...



2. maven-compiler-plugin 등록(이 프로젝트는 java8 버전을 사용하기 때문에 1.8 등록)


<build>

<plugins>

...

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.8</source>

<target>1.8</target>

</configuration>

</plugin>

...

</plugins>

</build>



이제 maven install 하면 target 에 제대로 컴파일 되는 것을 확인할 수 있다.