我使用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
。
您有什么想法吗?
答案 0 :(得分:0)
没有错。如果您未指定任何项目间依赖关系,则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依赖)。org.siouan.frontend
插件:一次是使用推荐的方式,一次是使用“旧”方式。删除后者(buildscript
块和apply
语句中的所有内容。另外,尽管我对org.siouan.frontend
插件不熟悉,但它似乎并未为您声明输入和输出-可能是因为它非常通用。因此,为避免每次构建后端时都运行npm
(因为现在已经依赖于前端),应为installFrontend
和assembleFrontend
之类的前端任务声明正确的输入和输出。