윈도우에서 그레들을 실행해본 적이 없어서(;;) 몰랐던 문제가 이번에 발생을 했다. 인코딩 문제…
다양한 개발환경을 가진 팀이 개발을 할떄도 신경써야 하는 부분이기도 하다. 이클립스의 파일 인코딩을
‘UTF-8’로 바꿨을 때도 이와 유사한 상황이 벌어지지 않을까 하는 생각이 들지만… 그건 그때 가서
살펴보도록 한다.
그레들이 실행될 때, 운영체제의 시스템설정들이 그대로 적용된다. 유닉스나 리눅스에서는 UTF-8로 인코딩이
유지가 되니까 별 무리가 없지만, 윈도우는 MS949 인코딩 처리가 되기에 문제가 발생했다.
발생한 문제는 다음과 같다.
발생문제
클래스 컴파일 시 한글주석을 넣은 클래스들에서 아래의 메시지를 뿌리며 컴파일이 진행되지 않았다.
- error: unmappable character for encoding MS949
- error: unclosed string literal
아무런 옵션없이 gradle을 실행하면 다음과 같이 encoding 관련한 오류가 발생을 한다.
C:\Users\ihoneymon\workspace\rocking-the-rest-api\src\main\java\kr\pe\ihoney\jco
\restapi\web\support\converter\AbstractEntityConverter.java:16: error: unmappabl
e character for encoding MS949
* JPA Entity ?대옒??蹂?솚???꾪븳 異붿긽?대옒??
^
C:\Users\ihoneymon\workspace\rocking-the-rest-api\src\main\java\kr\pe\ihoney\jco
\restapi\web\support\converter\AbstractEntityConverter.java:16: error: unmappabl
e character for encoding MS949
* JPA Entity ?대옒??蹂?솚???꾪븳 異붿긽?대옒??
^
C:\Users\ihoneymon\workspace\rocking-the-rest-api\src\main\java\kr\pe\ihoney\jco
\restapi\web\support\converter\AbstractEntityConverter.java:16: error: unmappabl
e character for encoding MS949
* JPA Entity ?대옒??蹂?솚???꾪븳 異붿긽?대옒??
^
C:\Users\ihoneymon\workspace\rocking-the-rest-api\src\main\java\kr\pe\ihoney\jco
\restapi\service\impl\CommunityServiceImpl.java:39: error: unclosed string liter
al
Member manager = memberService.save(new Member(community.getName() + "
愿?━??, community, community.getCreatedBy()));
^
C:\Users\ihoneymon\workspace\rocking-the-rest-api\src\main\java\kr\pe\ihoney\jco
\restapi\service\impl\CommunityServiceImpl.java:39: error: ')' expected
Member manager = memberService.save(new Member(community.getName() + "
愿?━??, community, community.getCreatedBy()));
^
2 errors
:generateQueryDSL FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':generateQueryDSL'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.
BUILD FAILED
Total time: 6.63 secs
ihoneymon@IHONEYMON-VIRPC ~/workspace/rocking-the-rest-api (master)
$
윈도우에서는 기본적으로 MS949 을 사용하고 있는데, UTF-8로 작성한 소스코드를 가져와 컴파일하면 위와 같은 문제가 발생한다.
해결방법
gradle을 실행할 때 기본적으로 줄 수 있는 옵션에 file.encoding 을 추가하는 것이다. 윈도우 시스템설정-환경변수에서
GRADLE_OPTS=-Dfile.encoding=UTF-8
을 추가하면 된다.
환경변수 설정을 하고 배쉬나 커맨드라인을 닫고 재실행하여 진행하면 적용된다.