각종 빌드 옵션이나 외부 프로젝트 경로를 gradle.properties 파일에 설정해두고 build.gradle에서 이를 참조하도록 설정하면 빌드를 관리하기가 편하다. 그러나 여러 명이 다양한 환경에서 개발하게될 경우, gradle.properties 파일이 버전관리 시스템에 들어가면 매우 불편한 상황이 생긴다.
2명의 개발자가 어떤 외부 라이브러리 프로젝트를 참조하기 위해 ext_lib_path라는 property를 아래와 같이 설정해두고 작업을 한다고 가정해보자.
개발자1: ext_lib_path=C:\Users\dev1\Libraries\ext_lib
개발자2: ext_lib_path=/home/dev2/libs/ext_lib
라이브러리의 위치는 물론 경로구분자까지 다르기 때문에 단순히 같은 경로에 라이브러리를 두거나 상대경로로 지정하는 것으로는 해결되지 않는다.
이럴 때 gradle.properties를 홈디렉토리에 만들어두면 편리하다.
OS별 홈디렉토리는 다음과 같다. (출처)
- Mac OS X
- /Users/<username>/.gradle/
- Linux
- /home/<username>/.gradle/
- Windows Vista & 7+
- C:\Users\<username>\.gradle\
다만 이런 방식에서 주의할 점은, 홈 디렉토리에 있는 gradle.properties 파일은 프로젝트 디렉토리에 있는 gradle.properties를 오버라이드 하며, 다른 모든 gradle 프로젝트가 참조하게 되므로, property가 중복되지 않도록 하려면 property 이름이 프로젝트 이름을 포함하도록 짓는 것이 좋다.
PROJECT_FOO_EXT_LIB_PATH=/some/where/ PROJECT_BAR_EXT_LIB_PATH=/some/where/else/
그리고 이들 property를 설정해야한다는 정보를 프로젝트 README 파일의 프로젝트 세팅, 빌드 환경 설정 관련 항목에 적어두어야 한다.
만약 프로젝트 이름을 포함하지 않고 그냥 EXT_LIB_PATH=/elsewhere/로 설정한 상태에서 프로젝트 Foo, Bar가 EXT_LIB_PATH을 참조하면 전혀 엉뚱한 경로를 찾게 되므로 문제가 생긴다.
local.properties(기본적으로 버전관리에서 제외되는 파일)에 지정해두는 방법도 있지만, 엄밀히는 local.properties 파일은 gradle에서 지원하는 것이 아니고 안드로이드 플러그인이 처리하는 파일이다. 즉, 커스텀 플러그인을 작성하거나 하는 경우에는 참조하기가 번거로워진다. (local.properties 파일을 읽어들이는 부분을 구현해야한다.)