Tools/BuildTools

그레들gradle 컴파일시 인코딩 오류 발생

허니몬 2014. 10. 16. 15:23

윈도우에서 그레들을 실행해본 적이 없어서(;;) 몰랐던 문제가 이번에 발생을 했다. 인코딩 문제…
다양한 개발환경을 가진 팀이 개발을 할떄도 신경써야 하는 부분이기도 하다. 이클립스의 파일 인코딩을
‘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

을 추가하면 된다.

환경변수 설정을 하고 배쉬나 커맨드라인을 닫고 재실행하여 진행하면 적용된다.