我正在嘗試使用我的 spring 后端構建和打包一個 react 應用程式(這樣它們就可以托管在一起)。我有反應應用程式src/main/js,我需要做的是構建它,然后復制構建檔案夾的內容,resources/static然后將 index.html 從那里復制到resources/templates(所以我的主彈簧控制器可以為它服務)
我已經關注了該主題中的多個教程,即使它們都沒有完全作業,我已經設法提出了這個解決方案(只添加了我的任務部分build.gradle.kts:
val jsDir = "src/main/js"
val staticDir = "src/main/resources/static"
val templatesDir = "src/main/resources/templates"
tasks.register<YarnTask>("installDependencies") {
args.set(listOf("install"))
execOverrides.set {
setWorkingDir(jsDir)
}
}
tasks.register<YarnTask>("buildReact") {
dependsOn("installDependencies")
args.set(listOf("build"))
execOverrides.set {
setWorkingDir(jsDir)
}
}
tasks.register<Delete>("preCleanup"){
delete(staticDir)
delete(templatesDir)
mkdir(staticDir)
mkdir(templatesDir)
}
tasks.register<Delete>("cleanup"){
delete("$staticDir/index.html")
delete("$jsDir/build")
}
tasks.register<Copy>("copyBuild"){
dependsOn("buildReact")
from("$jsDir/build")
into(staticDir)
}
tasks.register<Copy>("copyTemplate"){
dependsOn("copyBuild")
from("$staticDir/index.html")
into(templatesDir)
finalizedBy("cleanup")
}
tasks.register<Task>("buildWeb"){
dependsOn("preCleanup")
finalizedBy("copyTemplate")
}
tasks.bootRun{
dependsOn("buildWeb")
}
(我正在使用這個Gradle Node 插件)
查看我的檔案,構建是成功的,但是當我導航到我的應用程式的 url 時,我要么看到一個錯誤頁面(在第一次構建上),要么看到我的 react 應用程式的先前版本。幾乎似乎該bootRun任務在運行我的任務之前保存了檔案的狀態,因此它總是獲得以前版本的反應檔案
我可以通過創建一個依賴于我的新任務來解決這個問題,buildWeb但如果可以自動完成這項作業bootRun,那就更好了。bootRun
tasks.register<Task>("bootRunWithWeb"){
dependsOn("buildWeb")
finalizedBy("bootRun")
}
uj5u.com熱心網友回復:
bootRun 在其類路徑上有主源集的輸出,但您正在將內容復制到其輸入位置之一。將資源從輸入位置復制到輸出位置的是 processResources 任務。如果 processResources 在您將檔案添加到 src/main/resources 之前運行,則新檔案將丟失。
要解決此問題,您可以使 processResources 依賴于 buildWeb,或者您可以將檔案復制到 sourceSets.main.output.resourcesDir。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/459806.html
