gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:57:22 24 4
gpt4 key购买 nike

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

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

我需要首先构建项目前端,然后是后端。我试过了

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

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

有和没有 : 位于根项目的 settings.gradle.kts 中,但构建顺序仍然是按字母顺序 - 后端,而不是前端

View source code on GitHub

您知道哪里出了问题吗?

最佳答案

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

但是假设您喜欢构建前端(使用 Node),然后将这些资源包含在后端(使用 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 block 和 apply 语句中的所有内容。

另外,虽然我不熟悉 org.siouan.frontend插件,它似乎没有为您声明输入和输出 - 可能是因为它非常通用。所以要避免运行npm每次构建后端时(因为您现在依赖于前端),您应该为前端任务声明正确的输入和输出,例如 installFrontendassembleFrontend .

关于java - 使用 Kotlin 脚本的 Gradle 多项目构建顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58733249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com