Логика в gradle / groovy скриптинге - PullRequest
0 голосов
/ 18 ноября 2018

Я новичок в области Groovy-Gradle, и сейчас я прохожу несколько онлайн-курсов, но мне здесь чего-то не хватает.

Я приведу вам пример. Это создает файл Jar:

apply plugin: 'java' // 1. Apply the Java plugin to the project

sourceSets {
    main {
        java {
            srcDir 'java' // 3. Add 'java' directory as a source directory
        }
    }
}

jar {
    manifest {
        attributes 'Implementation-Version': '1.0' // 2. Add manifest attribute
    }
}

Вы можете найти это решение везде, но неясное объяснение.

Теперь можно применить плагин: Plugin.apply(T) Я предполагаю, что плагин является экземпляром объекта, а apply является его методом, а T является аргументом. Так что же такое apply plugin "java"?

Существует также вещь, называемая sourceSets. Это может быть метод, который принимает аргумент Closure, или это может быть свойство, которое принимает Closure в качестве аргумента из-за метода получения по умолчанию, сгенерированного groovy. Я не могу сказать, потому что в Groovy знак равенства не является обязательным, круглые скобки являются необязательными .--- ОЧЕНЬ ИННОВАЦИОННЫЙ !!!!!!!!

И, наконец, есть вещь, которая называется главной. Я не могу найти, что это такое, и я искал это везде, даже здесь: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.SourceSet.html

И этот 'main' -тинг содержит объект, называемый java (выглядит как экземпляр SourceDirectorySet), который содержит метод srcDir, который принимает строку в качестве аргумента.

Имеет ли это смысл для вас? Как извлечь информацию отсюда: https://docs.gradle.org/current/dsl/, и использовать его в сборке?

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 19 ноября 2018

Я на своем мобильном телефоне, поэтому сложно объяснить всю магию Gradle, но это должно помочь вам на вашем пути.

Существует неявный экземпляр Project в области видимости, и большая часть того, что вы видите в скрипте gradle, делегирует это.

Например,

apply plugin: 'java' 

Эквивалентно

getProject().apply([plugin: 'java'])

Вы можете прочитать больше в написании пользовательского раздела плагина , но есть файл свойств, который сопоставляет "java" с JavaPlugin

Когда вы применили плагин "java", это "смешает" JavaPluginConvention с проектом (так что теперь вы можете вызывать getSourceSets () в java, который можно сократить до "sourceSets" в groovy)

Одной из функций, которая широко используется в DSL Gradle, является метод Groovy methodMissing (...) .Так что

sourceSets.main { ... } 

будет фактически динамически делегироваться

sourceSets.getByName('main').configure { ... } 

Еще одна особенность, которая является источником "магии", заключается в том, что в groovy вы можете написать

def a = new A()
a.foo = 'bar'
a.baz('x')

Как

def a = new A()
a.with {
    foo = 'bar'
    baz('x')
} 

Надеемся, что вы видите, что все ссылки на свойства / методы в замыкании делегированы экземпляру "a".Этот стиль конфигурации помогает сценариям Gradle оставаться краткими.

См. по методу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...