Настройка кодека Swagger с помощью Gradle.Как работает предоставленный скрипт Gradle? - PullRequest
0 голосов
/ 01 февраля 2019

Я сражаюсь с этим кодом здесь: https://github.com/thebignet/swagger-codegen-gradle-plugin-example

Пытаюсь построить REST-клиент, используя кодекс Swagger и Gradle.Я новичок в Gradle и смотрю на этот пример довольно запутанно, так как есть несколько переменных / свойств / имен, которые я понятия не имею, откуда они берутся или что они делают.Особенно эта часть:

clean.doFirst {
    delete(swaggerOutputDir)
}

configurations {
    swagger
}

sourceSets {
    swagger {
        compileClasspath = configurations.swaggerCompile
        java {
            srcDir file("${project.buildDir.path}/swagger/src/main/java")
        }
    }
    main {
        compileClasspath += swagger.output
        runtimeClasspath += swagger.output
    }
    test {
        compileClasspath += swagger.output
        runtimeClasspath += swagger.output
    }
}

compileSwaggerJava.dependsOn generateApi
classes.dependsOn swaggerClasses
compileJava.dependsOn compileSwaggerJava

swagger.output - откуда это?

классы, compileJava, swaggerClasses, compileSwaggerJava Что всеиз тех?Они, кажется, нигде не определены и, кажется, случайно названы?

Затем файл readme сообщает: Чтобы создать исходный код Swagger, запустите следующую задачу.generateApi: генерировать код Swagger

Где, черт возьми, Swagger и код откуда?

Любые разъяснения очень ценятся, и я верю, что поможетнамного больше людей.

1 Ответ

0 голосов
/ 02 февраля 2019

Чтобы полностью понять этот код, вы должны прочитать Gradle DSL (язык, специфичный для домена)

SourceSet представляет логическую группу источника и ресурсов Java.Внутри блока sourceSets {} определен новый SourceSet swagger.

В приведенной выше ссылке на определение SourceSet вы заметите, что, поскольку swagger теперь является SourceSet, он имеетсвойство output, которое предоставляет все выходные каталоги этого SourceSet: таким образом, вы можете вызвать swagger.output

В каждом проекте Gradle Java есть предположение, что существуют основные источники и тестовые источники.Предположение делается плагином java, который необходим Gradle для обработки Java.(Этот макет происходит от Стандартного макета каталога .) С помощью main{} и test{} вы настраиваете эти исходные наборы.Конечно, у вас может быть больше исходных наборов.Что делают compileClasspath += swagger.output и runtimeClasspath += swagger.output, так это добавление сгенерированного swagger кода (или любого вывода swagger в целом) в их каталог classpath времени компиляции и выполнения.Поскольку swagger выполняет генерацию кода, это ожидаемое поведение.

Задача представляет собой один атомарный элементчасть работы для сборки, такая как компиляция классов или создание javadoc.

Упомянутый выше плагин java при создании нового SourceSet также создает несколько связанных задач :compileSourceSetJava, processSourceSetResources и sourceSetClasses (замена SourceSet именем каждого SourceSet).Вот что представляют собой compileSwaggerJava, swaggerClasses, сгенерированные задачи из swagger SourceSet.
Для стандартных наборов источников эти равны :
для основного набора источников: compileJava, processResources, classes
и
для тестового набора источников: compileTestJava, processTestResources, testClasses

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

Это настраивается через свойства задачи .Одним из них является свойство dependsOn, которое объясняет этот последний блок предоставленного вами кода.(Примечание: задача generateApi в последнем блоке кода определена в ссылке, которую разделяет ОП в вопросе)

...