보통 Maven 컴파일 시 발생하는 에러입니다.
1. 에러 원인
리눅스에 Maven을 설치한 후에, JAVA_HOME 환경변수를 설정해줘야 Maven이 JDK 위치를 찾아서 실행할 수 있습니다.
Maven의 목표는 우리가 실행하려는 프로젝트의 소스 코드에 맞는 적합한 Java 컴파일러를 실행시키는 것이기 때문입니다.
만약, JAVA_HOME 환경변수를 설정하지 않았거나 제대로 된 JDK 위치를 가리키지 않은 경우, 다음과 같은 에러를 냅니다.
mvn -version
# Output...
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK, not a JRE
Maven이 JAVA_HOME을 찾는 원리를 초간단하게 설명하자면..
내부적으로(Apache Maven v3.5.4)
$JAVA_HOME/bin/java 을 찾도록 설정되어 있습니다.
그런데 만약, JDK가 아닌 JRE를 가리키도록 설정되어 있어도 초기 단계에서는 에러가 안납니다.
왜냐면 JDK와 JRE 둘 다 bin 폴더와 javac 파일을 가지고 있기 때문입니다.
JRE의 메인 기능은 Java code를 실행시키는 것(run)이지만,
JDK는 실행과 컴파일, 디버그(run, compile, debug) 등 여러 다른 중요한 것들을 합니다.
하여간 우리는 JAVA_HOME 을 JRE가 아닌, JDK를 가리키도록 해야합니다.
그래서 내 JAVA_HOME이 JDK를 제대로 가리키고 있는건지 확인하는 방법은?
다음 명령어를 쳐서 다음과 같이 버전정보가 나온다면 제대로 가리키고 있는겁니다.
이렇게 뜨면, 제대로 가리키고 있지 않다는겁니다.
> bash: /bin/javac: No such file or directory
2. 해결 방법
방법은 2가지가 있습니다.
① 해당 서버 환경에서 JAVA_HOME 을 JRE 위치가 아닌 JDK를 가리키도록 변경
이건 검색 좀만 해봐도 나오니.. 생략 (환경변수 설정하는 방법)
② Project 소스에서 고쳐주는 방법 (pom.xml)
configuration 태그 안에 아래와 같이 jdk 위치를 명시해주세요!
물론, executable 태그 안에는 서버에 깔려있는 jdk 위치를 각자 상황에 맞게 가리켜야겠죠
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<fork>true</fork>
<executable>/usr/lib/jvm/java-11-openjdk-amd64/bin/javac</executable>
</configuration>
</plugin>
'Linux' 카테고리의 다른 글
[Maven 빌드 에러] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project musicchart: Compilation failure (2) | 2020.09.30 |
---|---|
웹 배포를 위한 Spring + MySQL 세팅하기 (0) | 2019.12.31 |
리눅스 서버 설치기 4 - 원격 컴퓨터와 서버컴퓨터 사이에 Git을 이용하여 실시간 파일 주고 받기 (0) | 2019.12.31 |
리눅스 서버 설치기 - 3. Apache 설치 및 Tomcat 연동 (1) | 2019.12.25 |
리눅스 서버 설치기 - 2. Tomcat (4) | 2019.12.24 |