Maven 빌드 시 [ERROR] COMPILATION ERROR : (패키지명) does not exist가 나오는 경우가 있다.

 

이는 해당 소스에서 특정 라이브러리를 참조하지 못해서 나오는 경우인데

 

즉, Maven에는 없는 자체 jar 파일 등 추가를 해야될 필요가 있을 때 사용하는 방법이다.

 

방법은 다음과 같다.

 

1. pom.xml에 필요한 라이브러리 내용을 추가한다.

<id>, <name> 은 원하는 명칭으로 지정

<url>file://${project.basedir}/libs<url>은 프로젝트 내의 추가할 라이브러리가 있는 임의폴다의 최상위 경로를 지정한다.

 

libs라는 디렉토리를 프로젝트 내에 바로 생성하였다.

pom.xml의 <url>file://${project.basedir}/"디렉토리명"<url>

"디렉토리명" 과 같은 이름으로 생성하면 된다.

 

2. pom.xml에 다음과 같이 jar 내용을 추가한다.

 

<groupid>, <artifactid>, <version>을 임의로 지정한다.

이제 libs 폴더 안에 다음과 같이 폴더를 생성한다. 

 

 

 

pom.xml에 지정한 명칭을 사용하여 <groupid>/<artifactid>/<version> 구조로 디렉토리를 생성

그리고 해당 jar를 넣는다.

jar의 이름은 <artifactid>-<version>.jar 라 지정한다.

 

이때 주의해야할 것은 버전명의 범위인데,

0 부터 0.0.0 까지이다. 다만 범위가 더 커져야 할 경우 0.0.0-0-0 까지 '-' 으로 지정 가능하다.

 

로컬에서 개발할 때와 알파 서버에 배포하였을 때, 경로를 다르게 설정하기 위해 Maven Profile을 사용.

프로필 정의

local(개발용), alpha(배포용) 프로필 설정

여기서 사용하는 프로필에 따라 <env>...</env> 값이 다르게 설정되는 것을 볼 수 있다. 

이 값은 빌드시 어떤 Resource 경로를 참조할 건지 결정하는데 사용된다.

리소스 정의

아래 설정에서 env 값을 어떻게 사용하는지 볼 수 있다. 

프로필이 local일 때는 resources-local 디렉토리를 추가로 참조한다.  (local 서버용)

alpha일 때는 resources-alpha를 참조한다. (alpha 서버용)

이클립스에서 보면 아래와 같은 구조

resource-local/image-config.properties에는 로컬의 설정 파일 경로가 저장되어 있다.

resource-alpha/image-config.properties에는 alpha라는 서버의 설정 파일가 저장되어 있다.

이클립스에서 프로필 선택

프로필을 설정하면 프로젝트 우클릭 > Maven > Select Maven Profiles에서 프로필 선택이 가능하다. 

이 프로젝트의 경우 local이 <activeByDefault>true</activeByDefault>로 설정되었기 때문에 자동으로 선택되어 있다.

배포시 프로필 설정

알파라는 서버에 배포할 때는 alpha 프로필을 선택해야 한다. 

mvn package 명령어 실행시 -P 옵션으로 프로필을 지정할 수 있다.

> mvn package -P alpha

pom.xml에 의존성 추가하기

 

참조 : https://mvnrepository.com/ -> apache log4j 검색

 

 

src/main/resources 경로에 log4j.xml 설정파일 만들어주기 

(구조만들기 참조 : https://nuji-94.tistory.com/8)

 

log4j.xml 파일 내용

 

PatternLayout의 패턴 정의

 

PatternLayout에서 로그를 출력할 때 사용할 패턴을 정의.

프로퍼티 이름은 ConversionPattern 이다.


###############################################

# FaTAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
# ERROR : 일반 에러가 일어 났을 때 사용합니다.
# WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
# INFO : 일반 정보를 나타낼 때 사용합니다.
# DEbUG : 일반 정보를 상세히 나타낼 때 사용합니다.

################################################



######################################################################
#%p  debug, info, warn, error, fatal 등의 priority 가 출력된다.  
#%m  로그내용이 출력됩니다 
#%d  로깅 이벤트가 발생한 시간을 기록합니다.
#  포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다 
#%t  로그이벤트가 발생된 쓰레드의 이름을 출력합니다.  
#%%  % 표시를 출력하기 위해 사용한다.  
#%n  플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.  
#%c  카테고리를 표시합니다 
#  예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다. 
#%C  클래스명을 포시합니다. 
#  예)클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다 
#%F  로깅이 발생한 프로그램 파일명을 나타냅니다. 
#%l  로깅이 발생한 caller의 정보를 나타냅니다 
#%L  로깅이 발생한 caller의 라인수를 나타냅니다 
#%M  로깅이 발생한 method 이름을 나타냅니다. 
#%r  어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds) 
#%x  로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다. 
#%X  로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다. 

#######################################################################

 

log4j 예시

 

 



 

'공통' 카테고리의 다른 글

[공통] JSON이란?  (0) 2021.01.05
[공통] Proxy 설정하기 (Feat. Putty)  (0) 2021.01.05

+ Recent posts