gradle 플러그인 적용의 차이점


187

gradle plugins block을 이해하지 못합니다

apply plugin: 'someplugin1'
apply plugin: 'maven'

그리고 다른 하나 :

plugins {
   id 'org.hidetake.ssh' version '1.1.2'
}

첫 번째 블록에는 플러그인 이름이 있습니다. 두 번째 패키지와 버전. 첫 번째 블록을 사용해야하는 위치와 두 번째 블록을 사용해야하는 시점을 이해하지 못합니다.


30
Gradle을 사용하면 동일한 작업을 수행하는 2 가지 이상의 방법을 볼 수 있습니다.
Paulo Merson

7
Gradle은 빌드 시스템의 Perl입니다.
sakra

답변:


178

plugins블록은 플러그인을 적용하는 새로운 방법이다, 그들은에서 사용할 수 있어야합니다 Gradle을 플러그인 저장소 . apply방법은 빌드에 플러그인을 추가하는 나이, 아직 더 유연한 방법입니다.

새로운 plugins방법은 다중 프로젝트 구성 ( subprojects, allprojects)에서는 작동하지 않지만 각 하위 프로젝트의 빌드 구성에서는 작동합니다.

기능이 진행됨에 따라 plugins구성 방법이 이전 방식을 능가 한다고 생각 하지만이 시점에서 둘 다 동시에 사용할 수 있습니다.


4
플러그인 DSL ( plugins {...})을 사용하여 플러그인을 적용하는 것은 공식 Gradle 플러그인 저장소에 게시되지 않은 개인 플러그인 또는 회사 플러그인에는 작동하지 않습니다. 그렇기 때문에 새로운 접근 방식이 개인 저장소 검색을 지원할 때까지 이전 접근 방식이 적어도 살아남기를 바랍니다.
Datz

2
pluginsGradle 튜토리얼 (Gradle 버전 5.6.2)에 따라 다중 프로젝트에서 작동합니다. guides.gradle.org/creating-multi-project-builds/… 전체 프로젝트에 플러그인을 추가하기 위해 pluginswith apply false를 사용 하지만 추가하지는 않습니다. 루트 프로젝트에. 서브 프로젝트는 plugins블록을 다시 사용 하여 플러그인을 추가합니다.
yetsun

pluginsover 를 사용 하는 데는 아무런 의미가 없습니다 apply plugin.
sakra

1
2020 년과 저는 여전히 사용하고 있습니다apply plugin
Blundell

이것은 완전히 다른 구문과 입력을 가진 두 개의 지시어가 절대적으로 끔찍합니다. Gradle은 Java와 Kotlin을 사용할 때 목에 가장 큰 고통입니다.
기독교

57

@cjstehno가 이미 언급했듯이 apply plugin피해야 할 레거시 방법입니다.

플러그인 DSL의 도입으로, 사용자는 플러그인을 적용하는 레거시 방법을 사용할 이유가 거의 없습니다. 빌드 작성자가 현재 작동하는 방식의 제한으로 인해 플러그인 DSL을 사용할 수없는 경우에 여기에 설명되어 있습니다.

새로운 plugins block방법을 사용하면 선택적 매개 변수를 사용하여 플러그인을 추가하고 적용시기를 제어 할 수 있습니다 apply.

plugins {
    id «plugin id» version «plugin version» [apply «false»]
}

plugins블록 에 이미 추가되었지만 적용되지 않은 플러그인을 적용하려는 상황에서는 레거시 방법을 계속 사용합니다 . 예를 들어, 마스터 프로젝트에서 플러그인 xyz은 추가되었지만 적용되지 않으며 하위 프로젝트에만 적용해야합니다 subPro.

plugins {
  id "xyz" version "1.0.0" apply false
}

subprojects { subproject ->
    if (subproject.name == "subPro") {
        apply plugin: 'xyz'
    }
}

더 이상 버전이 필요하지 않습니다. 버전이 필요합니다 plugins당신은 같은 코어 Gradle을 플러그인 중 하나를 사용하지 않는 블록 java, scala...

나는 Spring Boot응용 프로그램 을 만들려고 할 때 차이점을 이해하는 데 시간을 보냈기 때문에 잠시 후에 다시 대답합니다. Spring Boot플러그인 사용에 대한 다음 예제 는 많은 도움이되었습니다.

현재 사용해야 할 것 :

plugins {
  id "org.springframework.boot" version "2.0.1.RELEASE"
}

Gradle 2.1 이전에 사용 된 것 :

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE"
  }
}

apply plugin: "org.springframework.boot"

이것은 어떻게 든 잘못된 인상을줍니다. 하나는 간단하게 변환 할 수 없습니다 apply plugin xxxplugins { id xxx }(나는 그것을 시도하고 작동하지 않았다)
기독교

나는 대답과 인용 된 문서가 이것을 분명히 밝힌다 고 생각합니다. 이것은 귀하의 경우에 따라 다릅니다. 사례에 대한 자세한 정보를 제공하거나 다른 질문으로 게시 할 수 있습니다.
Mousa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.