3

我使用 Spring Rest Docs 和 JIB

当我这样做./gradlew buildjava -jar /some/build/libs/app.jar。我可以在example.com/docs/asciidocname.html.

但 docker 图像./gradlew jib不包含此 url。

我想获得由 Spring Rest Docs 生成的 Api 文档,当我这样做时./gradlew jib

以下是我的一部分build.gradle

plugins {
    id "org.asciidoctor.convert" version "2.4.0"
    id "com.google.cloud.tools.jib" version "2.5.0"
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
    asciidoctor
}

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/milestone' }
    maven { url 'https://repo.spring.io/snapshot' }
}

sourceCompatibility = '11'

dependencies {
    /**
     * RestDocs
     */
    asciidoctor 'org.springframework.restdocs:spring-restdocs-asciidoctor'
    testImplementation('org.springframework.restdocs:spring-restdocs-mockmvc')
}

test {
    useJUnitPlatform {
        includeEngines 'junit-jupiter'
    }
}

/*************************
 * Rest Docs
 *************************/
asciidoctor {
    dependsOn test
}

bootJar {
    dependsOn asciidoctor
    from ("${asciidoctor.outputDir}/html5") {
        into 'static/docs'
    }
}

4

2 回答 2

2

您已将bootJar任务配置为依赖于asciidoctor任务并包含生成的 HTML 文件:

bootJar {
    dependsOn asciidoctor
    from ("${asciidoctor.outputDir}/html5") {
        into 'static/docs'
    }
}

Jib 在构建容器镜像时不使用 jar 文件,因此您需要向 Jib 添加类似的配置。

让我们先看看让它包含生成的 HTML。它提供了一个名为 的扩展,jib您可以在其中extraDirectories执行此操作:

jib {
    extraDirectories {
        paths {
            path {
                from = "${asciidoctor.outputDir}/html5"
                into = "/app/resources/static/docs"
            }
        }
    }
}

您可以在其 Gradle 插件的文档中了解有关将文件添加到 Jib 生成的图像的更多信息。

现在我们需要将jib任务配置为依赖于asciidoctor任务。这可确保在 Jib 尝试将其包含在图像中之前已生成 HTML。由于扩展和任务都被命名jib,我们需要明确地引用任务:

tasks.named('jib') {
    dependsOn asciidoctor
}

如果您曾经将映像构建到本地 Docker 守护程序,您可能还需要类似的jibDockerBuild任务配置:

jibDockerBuild {
    dependsOn asciidoctor
}
于 2020-10-04T07:26:06.240 回答
1

我发现了另一种方法。

第一的。JIB 通过java -cp命令执行一个主要的 java 类。未打包.jar的文件。

和 asciidoctor 任务将 html 文件复制到 jar 文件中。

我可以在 jib gradle github 上找到选项。

  1. 如果您使用containerizingMode = 'packaged'选项。它将构建 jar 文件并java -cp在 docker 容器中执行命令。
  2. 带有此选项的任务./gradlew jib将执行jar任务。

所以我将我的 bootJar 任务复制到 jar 任务并使用该选项。效果很好

于 2020-10-05T03:59:03.193 回答