빌링 자동화를 하려고 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 에 제대로 컴파일 되는 것을 확인할 수 있다.
'공부 > 프로그래밍' 카테고리의 다른 글
[SpringBoot] 간단 Slf4j 로그설정 (0) | 2018.12.09 |
---|---|
[mysql] 동시성 문제 해결하기(FOR UPDATE) (1) | 2018.12.05 |
[python-pip] mysqlclient 설치 중 에러날때(mysql.h) (4) | 2018.11.09 |
[SpringBoot] Spring Rest Docs + Spock 사용하기 (0) | 2018.10.30 |
[docker] MariaDB replication(master-slave) 설정 (2) | 2018.10.25 |
댓글