문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
gradle:customplugins [2012/10/06 20:31] kwon37xi [사용자 정의 태스크와 플러그인에서 파일 다루기] |
gradle:customplugins [2020/05/24 20:43] kwon37xi |
||
---|---|---|---|
줄 77: | 줄 77: | ||
종종 지정할 프라퍼티가 많은 경우 확장 객체에 구성 클로저 블록을 추가하여 한번에 설정할 수 있도록 해준다. | 종종 지정할 프라퍼티가 많은 경우 확장 객체에 구성 클로저 블록을 추가하여 한번에 설정할 수 있도록 해준다. | ||
- | * 구성 클로서를 사용하는 플러그인 '' | + | * 구성 클로저를 사용하는 플러그인 '' |
apply plugin: GreetingPlugin | apply plugin: GreetingPlugin | ||
줄 145: | 줄 145: | ||
===== 독립 프로젝트 ===== | ===== 독립 프로젝트 ===== | ||
+ | 독립 프로젝트로 만들면 jar로 배포하여 다른 사람들과 공유할 수 있다. 보통 다음과 같은 최소한의 빌드 스크립트로 시작한다. | ||
+ | * 사용자 정의 플러그인을 위한 '' | ||
+ | apply plugin: ' | ||
+ | |||
+ | dependencies { | ||
+ | compile gradleApi() | ||
+ | groovy localGroovy() | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Gradle은 [[http:// | ||
+ | * '' | ||
+ | implementation-class=org.gradle.GreetingPlugin | ||
+ | </ | ||
+ | |||
+ | 프라퍼티 파일의 이름이 플러그인의 이름이 된다. '' | ||
+ | |||
+ | ==== 다른 프로젝트에서 플러그인 사용하기 ==== | ||
+ | '' | ||
+ | |||
+ | * 다른 프로젝트에서 사용자 정의 플러그인을 사용하는 '' | ||
+ | buildscript { | ||
+ | repositories { | ||
+ | maven { | ||
+ | url uri(' | ||
+ | } | ||
+ | } | ||
+ | dependencies { | ||
+ | classpath group: ' | ||
+ | } | ||
+ | } | ||
+ | apply plugin: ' | ||
+ | </ | ||
+ | |||
+ | ==== 플러그인의 테스트 작성하기 ==== | ||
+ | [[http:// | ||
+ | |||
+ | * '' | ||
+ | class GreetingPluginTest { | ||
+ | @Test | ||
+ | public void greeterPluginAddsGreetingTaskToProject() { | ||
+ | Project project = ProjectBuilder.builder().build() | ||
+ | project.apply plugin: ' | ||
+ | |||
+ | assertTrue(project.tasks.hello instanceof GreetingTask) | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 다중 도메인 객체 처리하기 ===== | ||
+ | Gradle은 빌드 언어와 잘 작동하는 객체의 컬렉션을 다루는 도우미 클래스를 제공해주고 있다. | ||
+ | |||
+ | * 도메인 객체를 다루는 '' | ||
+ | apply plugin: DocumentationPlugin // DocumentaionPlugin.apply()가 실행된다. | ||
+ | |||
+ | // books NamedDomainObjectContainer 값을 구성한다. apply보다 나중에 실행되지만 ' | ||
+ | books { | ||
+ | quickStart { | ||
+ | sourceFile = file(' | ||
+ | } | ||
+ | userGuide { | ||
+ | } | ||
+ | developerGuide { | ||
+ | } | ||
+ | } | ||
+ | |||
+ | task books << { | ||
+ | books.each { book -> | ||
+ | println " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class DocumentationPlugin implements Plugin< | ||
+ | void apply(Project project) { | ||
+ | def books = project.container(Book) | ||
+ | books.all { // 현재 있는, 그리고 앞으로 컬렉션에 추가될 객체를 모두 돌면서 아래 수행 | ||
+ | sourceFile = project.file(" | ||
+ | } | ||
+ | project.extensions.books = books | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Book { | ||
+ | final String name // ' | ||
+ | File sourceFile | ||
+ | |||
+ | Book(String name) { | ||
+ | this.name = name | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | * 실행하면 < | ||
+ | developerGuide -> / | ||
+ | quickStart -> / | ||
+ | userGuide -> / | ||
+ | </ | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ===== 태스크간의 의존성 ===== | ||
+ | 플러그인 태스크 간의 의존성은 다음과 같은 형태로 정의할 수 있다. | ||
+ | |||
+ | <code groovy> | ||
+ | project.task(' | ||
+ | dependsOn(project.tasks.a, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 플러그인에 의존성 주입 ===== | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | * [[https:// | ||
+ | |||
+ | ===== 참조 ===== | ||
+ | * [[https:// |