使用Kotlin脚本的Gradle多项目构建顺序

我使用Kotlin DSL脚本(.kts)进行构建。我项目的结构是:

Root project 'demo'
+--- Project ':backend'
\--- Project ':frontend'

我需要先构建项目frontend,而不是backend。我尝试过

include(":frontend")
include(":backend)

include(":frontend",":backend")

在根项目的 settings.gradle.kts 中带有:和不带有backend,但是构建的顺序仍然是字母-frontend,比StaxEventItemWriter

View source code on GitHub

您有什么想法吗?

tangshuo4444 回答:使用Kotlin脚本的Gradle多项目构建顺序

没有错。如果您未指定任何项目间依赖关系,则Gradle将按字母顺序执行它们。如果这两个项目现在不相关,那应该没问题。

但是,假设您喜欢构建前端(使用节点),然后将那些资源包括在后端(使用Spring Boot)。然后,您将需要使后端取决于前端项目。然后Gradle将遵守依赖关系图并首先构建前端。

有很多方法可以做到这一点。一种是使用前端中的java插件来构建前端资源的jar文件。然后,您可以对其进行常规项目依赖。您还可以直接将依赖项添加到前端项目的“内部”构建任务中,但这有点令人讨厌。或者,您可以声明自己的工件,或以其他多种方式进行加工。

对于第一种方法,您可以像这样构建前端资源的jar文件:

plugins {
    // ...
    id("java")
}

java {
    // Required to make the jar artifact compatible with your backend,which is configured for Java 1.8
    targetCompatibility = JavaVersion.VERSION_1_8
}

tasks.named("jar",Jar::class) {
    dependsOn("assembleFrontend")
    from("$buildDir/dist")
    into("static")
}

然后在后端,像这样依赖它:

dependencies {
    // ...
    runtimeOnly(project(":frontend"))
}

您的构建脚本还存在其他一些问题。

  • 不推荐使用runtime配置;改用runtimeOnly(针对您的spring-boot-devtools依赖)。
  • 一个多项目应该只有一个settings.gradle文件,但是每个项目中只有一个。删除它们,除了根文件夹中的一个。
  • 您已经两次声明了org.siouan.frontend插件:一次是使用推荐的方式,一次是使用“旧”方式。删除后者(buildscript块和apply语句中的所有内容。

另外,尽管我对org.siouan.frontend插件不熟悉,但它似乎并未为您声明输入和输出-可能是因为它非常通用。因此,为避免每次构建后端时都运行npm(因为现在已经依赖于前端),应为installFrontendassembleFrontend之类的前端任务声明正确的输入和输出。

本文链接:https://www.f2er.com/3151040.html

大家都在问