Gradle: как я могу получить путь к определенной внешней зависимости, хранящейся в .gradle?

Я новичок в Gradle. Для репозитория генератора OpenAPI я воспользовался очень удобным плагином gradle, чтобы почти именно то, что я хочу (сгенерировать статические документы HTML2 в моей спецификации openapi.json), за исключением того, что есть старая ошибка, из-за которой этот документ не заполняется правильно. Был PR-запрос, который не затрагивался в течение многих месяцев, который в основном решает проблему, поэтому я создал собственный jar с изменениями.

Я хочу создать новую задачу gradle, которая запускает этот настраиваемый внешний jar как исполняемый файл, чтобы я мог по существу выполнять те же функции, что и их плагин оценки. Поступив так, я добавил его в репозиторий maven и удалил как зависимость:

dependencies {
    compile 'org.openapitools:openapi-generator-custom-cli:3.0.0'
}

Затем это помещает банку в мой каталог внешних библиотек, который хранится в очень конкретном месте в кеше (ref: Gradle: где хранятся внешние зависимости?)

Как я могу узнать точное местонахождение этой банки? Есть ли другой подход, который мог бы показаться более оптимальным?


person Jonas Tjahjadi    schedule 28.02.2020    source источник


Ответы (1)


Похоже, вы идете гораздо более сложным путем, чтобы получить настраиваемую документацию. Если проблема, которую вы обнаружили, связана только с шаблоном, вы можете указать templateDir в своей задаче Gradle и указать каталог, содержащий ваш настраиваемый каталог.

Например:

buildscript {
    repositories {
        mavenLocal()
        maven { url "https://repo1.maven.org/maven2" }
        maven {
            url "https://plugins.gradle.org/m2/"
        }
        maven {
            url "https://oss.sonatype.org/content/repositories/releases/"
        }
    }
    dependencies {
        classpath "org.openapitools:openapi-generator-gradle-plugin:4.2.3"
    }
}

apply plugin: 'org.openapi.generator'

task buildGoSdk(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
    generatorName = "go"
    templateDir = "$rootDir/custom-templates".toString()
    inputSpec = "$rootDir/petstore-v3.0.yaml".toString()
    additionalProperties = [
            packageName: "petstore"
    ]
    outputDir = "$buildDir/go".toString()
    configOptions = [
            dateLibrary: "threetenp"
    ]
}

Затем вы можете построить это с помощью gradle buildGoSdk.

Если проблема, которую вы хотите исправить, имеет некоторую логику в коде Java, который управляет генератором, вы можете создать пользовательскую банку генератора и загрузите ее, не изменяя сам плагин gradle.

На самом деле у меня есть образец репозитория для генератора HTML2, который делает именно это. В моем примере изменяется только имя генератора и добавляется Google Analytics в качестве параметра конфигурации и в шаблон, но это должно быть достаточно легко для выполнения. См. https://github.com/jimschubert/custom-generator-example.

Ключевой частью будет добавление вашего настраиваемого jar-файла генератора к зависимостям buildscript, подобным этим (взято из моего примера репо):

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath "us.jimschubert.examples:html-generator:1.0-SNAPSHOT"
        classpath "org.openapitools:openapi-generator-gradle-plugin:3.3.3"
    }
}

apply plugin: 'org.openapi.generator'

task buildCustomHtml2(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
    generatorName = "custom-html2"
    inputSpec = "$rootDir/petstore-v3.0.yaml".toString()
    additionalProperties = [
            appName: "My Custom HTML2 Generator",
            googleAnalytics: "12345-6"
    ]
    outputDir = "$buildDir/custom-html".toString()
}
person Jim Schubert    schedule 09.03.2020