Gradle은 build를 수행하는 java의 process를 쉽게 해주는 몇가지 옵션이 있다.
로컬 환경인 GRADLE_OPTS 나 JAVA_OPTS를 통해서, JVM 메모리 세팅, java home, daemon on/off 같은 설정들을 할 수 있어,
당신의 VCS 안에서 프로젝트는 전체 팀이 일관적인 환경에서 일할 수 있다.
일관적인 환경 세팅은 gradle.properties 파일 안에 setting을 함으로써 간단히 설정할 수 있다.
Configuration은 아래와 같은 순서로 적용된다.
- gradle.properties in project build dir.
- gradle.properties in gradle user home.
- system properties, e.g. when -Dsome.property is set on the command line.
다음 property들은 Gradle build 환경을 설정하는 데 사용할 수 있다.
org.gradle.daemon
true로 지정하면, build를 할 때에 daemon이 사용된다. local 개발자 build에게 자주 사용되어지는 property이다. 개발자 환경에 속도와 반응에 최적화되어 있기 때문에 우리는 거의 항상 Gradle job에 daemon을 사용한다. 그리고 우리는 CI build를 daemon과 함께 사용하지않는다. CI 환경은 consistency와 reliability에 최적화 되어 있다.
org.gradle.java.home
Gradle build를 위해 java home을 명시한다. jdk나 jre 둘 다 명시할 수 있지만, jdk를 명시하는 것이 안전할 수 있다. 명시되어 있지않다면, 적절한 default 값이 세팅된다.
org.gradle.jvmargs
daemon 프로세스를 위한 jvmargs를 명시한다. memory setting을 타이트하게 할 때 유용하다. 일반적으로 기본 setting은 memory를 여유롭게 활용한다.
org.gradle.configureondemand
프로젝트를 설정할 때 Gradle을 선택적으로 할 수 있는 incubating mode를 활성화시킨다.
org.gradle.parallel
설정되어 있다면, Gradle은 incubating parallel mode로 동작한다.
org.gradle.workers.max
설정하였을 때, Gradle은 주어진 worker의 최대치를 사용한다. 자세한 사항은 --max-workers 참조.
org.gradle.debug
true로 설정하면, Gradle은 포트 5005를 사용하여 remote debugging이 가능하게 build를 실행한다. JVM command line에 -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 를 추가하였을 때와 동일하다.
Forked Java processes
Java version 이나 max heap size 같은 많은 설정들은 build process 를 위한 새로운 JVM을 실행할 때 명시될 수 있다.
이 것은 Gradle은 다양한 gradle.properties 파일들을 파싱한 이후 build를 실해할 때, 각각의 JVM process를 실행해야한다는 것을 의미한다.
daemon이 동작할 때, 알맞은 parameter와 함께 JVM은 단 한번 실행되고 다른 build 실행시에는 재사용된다.
Gradle이 daemon 없이 동작할 때에는, 이전과 같은 parameter를 실행하더라도 build 실행시마다 새로운 JVM 이 실행되어야만 한다.
build 실행시마다 또 다른 JVM을 실행하는 것은 매우 비싼 작업이기 때문에, daemaon을 사용하는 것을 추천한다.
Gradle properties and system properties
Gradle은 당신의 build에 property를 추가할 수 있는 다양한 방법을 제공한다. -D 커맨드 라인과 함께 당신은 Gradle과 함께 동작하는 JVM에 system property를 전달할 수 있다.
Gradle command의 -D 옵션은 java command의 -D 옵션과 동일하다.
당신은 또한 properties file을 통해서도 프로젝트에 property를 추가할 수 있다. 당신은 당신의 user home directory 혹은 project directory 안에 gradle.properties 파일을 둘 수 있다.
multi-project build를 위해서 당신은 subproject directory의 어느 곳에도 gradle.properties 파일을 둘 수 있다. gradle.properties 파일에 설정되어 있는 property들은 project object에 의해 접근될 수 있다.
user home directory 안의 properties 파일은 project directories 안에 property file 보다 우선적으로 읽히게 된다.
또한 당신은 -P 커맨드 옵션을 통해 project object에 직접적으로 properties를 추가할 수 있다.
Gradle은 환경 변수나 특정한 이름의 system property 를 볼때에도 project properties 를 설정할 수 있다. 이것은 당신이 continuous integration server에 관한 admin 권한이 없고,
보안 문제 때문에 당신이 쉽게 볼 수 없는 property를 설정해야할 때 유용하다. 그러한 상황에 당신은 -P option을 사용할 수 없고, system-level configuration file을 바꿀 수 없다.
가장 적합한 전략은 continuous integration build job의 설정을 바꾸는 것이다.
만약 환경 변수이름이 ORG_GRADLE_PROJECT_prop=somevalue 와 같다면, Gradle은 당신의 project object에 prop property를 설정하고, somevalue로 값을 지정할 것이다.
Gradle은 system property에도 이것을 지원하지만, pattern은 org.gradle.project.prop. 와 같이 이름 형식은 다르다.
당신은 gradle.properties 파일 안에서도 시스템 변수를 선언할 수 있다. 만약 systemProp으로 시작하는 property 이름이 있다면, 그것의 key와 값은 시스템 변수로 취급된다.
multi project build에서 root 이외의 “systemProp.” properties 는 모두 무시된다. 그래서 오직 root의 gradle.properties 파일의 systemProp. 변수만 체크가 될 것이다.
Setting properties with a gradle.properties file
gradle.properties
gradlePropertiesProp=gradlePropertiesValue sysProp=shouldBeOverWrittenBySysProp envProjectProp=shouldBeOverWrittenByEnvProp systemProp.system=systemValue
build.gradle
task printProps << { println commandLineProjectProp println gradlePropertiesProp println systemProjectProp println envProjectProp println System.properties['system'] }gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps 의 실행 결과
> gradle -q -PcommandLineProjectProp=commandLineProjectPropValue -Dorg.gradle.project.systemProjectProp=systemPropertyValue printProps commandLineProjectPropValue gradlePropertiesValue systemPropertyValue envPropertyValue systemValueChecking for project properties 당신은 단순히 변수를 사용하는 것처럼 build script 안에서 project property에 접근할 수 있다. 만약 해당 property가 존재하지 않는다면 exception이 발생하고, build는 fail 할 것이다. 만약 build script가 선택적인 property에 의존하고 있다면, 반드시 사용 전에 존재하는지 체크해야한다. 그리고 당신은 hasProperty('propertyName') 메서드를 통해 체크할 수 있다. Accessing the web via a proxy dependency를 다운로드 받는 등의 행위를 위해 HTTP proxy를 설정해야할 경우가 있다. 이러한 property는 build script에 직접적으로 설정할 수 있다. Configuring an HTTP proxy gradle.properties
systemProp.http.proxyHost=www.somehost.org systemProp.http.proxyPort=8080 systemProp.http.proxyUser=userid systemProp.http.proxyPassword=password systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhostConfiguring an HTTPS proxy gradle.properties
systemProp.https.proxyHost=www.somehost.org systemProp.https.proxyPort=8080 systemProp.https.proxyUser=userid systemProp.https.proxyPassword=password systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhostNTLM Authentication
만약 proxy가 NTLM 인증을 필요로 한다면 당신은 아래와 같은 방법으로 제공할 수 있다.
- Set the http.proxyUser system property to a value like domain/username.
- Provide the authentication domain via the http.auth.ntlm.domain system property.
원본 출처 : https://docs.gradle.org/current/userguide/build_environment.html
댓글 없음 :
댓글 쓰기