====== Gradle Plugins ======
* [[http://www.gradle.org/docs/current/userguide/plugins.html|Gradle Plugins]]
* [[http://www.gradle.org/docs/current/userguide/standard_plugins.html|표준 Gradle Plugins]]
* [[http://www.gradle.org/docs/current/userguide/custom_plugins.html|Write Custom Plugins]]
* [[http://wiki.gradle.org/display/GRADLE/Plugins|다양한 Gradle Plugins]]
* [[http://gradle.org/gradle-plugin-best-practices-netflix-meetup/|Gradle Plugin Best Practices (Netflix Meetup)]]
* [[http://nebula-plugins.github.io/|Nebula: A collection of Gradle plugins, built by Netflix]]
===== Plugin Dependency Repository =====
* Gradle plugin 을 가져오는 repository 를 명시적으로 지정하고자 한다면 ''settings.gradle''에 다음과 같이 설정한다. (''init.gradle''을 사용할 수도 있음)
pluginManagement {
repositories {
maven { url "http://자기의MavenRepos주소" }
gradlePluginPortal() // https://plugins.gradle.org/m2/
}
}
* 자신의 repository ([[:nexus|SonaType Nexus]] 등)에 ''https://plugins.gradle.org/m2/''를 proxy로 추가해둔다.
===== 플러그인 적용 =====
* ''Project.apply()'' 메소드를 사용한다.
// 짧은 명칭 사용
apply plugin: 'java'
// FQCN 사용
apply plugin: org.gradle.api.plugins.JavaPlugin
// JavaPlugin은 자동 import 상태이므로 클래스만 써도 된다.
apply plugin: JavaPlugin
* 플러그인은 한 번 적용하면 그 뒤로 여러번 적용해도 아무 효과가 없다.
* 플러그인 클래스는 [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/Plugin.html|org.gradle.api.Plugin]] 인터페이스 구현체이다.
===== 플러그인으로 할 수 있는 일 =====
* 프로젝트에 태스크 추가
* 적합한 기본값으로 태스크를 미리 설정해 둠
* 프로젝트에 의존성 추가
* 확장을 통해 기존 타입에 다른 프라퍼티와 메소드 추가
apply plugin: 'java'
// java 플러그인에 추가된 compileJava.destinationDir, processResources.destinationDir 프라퍼티 확인해 보기
task show << {
println relativePath(compileJava.destinationDir)
println relativePath(processResources.destinationDir)
}
===== 관례(Convention) =====
* 플러그인들은 기본적으로 적합한 기본값을 갖도록 설정되어 있다.
* 이러한 값을 바꿀 수 있다.
apply plugin: 'java'
compileJava.destinationDir = file("$buildDir/output/classes")
task show << {
println relativePath(compileJava.destinationDir)
}
===== 플러그인들 =====
* [[https://github.com/eriwen/gradle-css-plugin|Gradle CSS Plugin]] CSS Plugin
* [[https://github.com/eriwen/gradle-js-plugin|Gradle JS Plugin]] Javascript Plugin
* [[https://github.com/ajoberstar/gradle-git|Gradle-Git]]
* [[https://github.com/townsfolk/gradle-templates|Gradle Templates]] 프로젝트 시작시 구조를 잡아주는 플러그인
* [[https://github.com/stevesaliman/gradle-properties-plugin|Gradle Properties Plugin]]
* [[https://github.com/marcoVermeulen/gradle-spawn-plugin|Gradle Spawn Plugin]] Unix 명령 실행/중단
* [[https://github.com/ben-manes/gradle-versions-plugin|gradle version plugin]] 의존성 변경을 추적하고 문서화 해줌
* [[https://github.com/ZeroBrain/gradle-play-publisher|Gradle Android Play Publisher]]