В этом нет ничего плохого. Если вы не укажете никаких межпроектных зависимостей, 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
каждый раз, когда вы создаете свой бэкэнд (поскольку у вас теперь есть зависимость от внешнего интерфейса), вы должны объявить надлежащие входные и выходные данные для задач внешнего интерфейса, такие как installFrontend
и assembleFrontend
.