我的專案是帶有gradle的spring boot。我的目標是讓 spring boot 生成 2 個不同的 boot jar。第一個 jar 是今天創建的典型 jar,將用于生產系統。第二個 jar 將被其他系統用于集成測驗。第二個 jar 將具有一組不同的配置和依賴項。有沒有其他人這樣做過?我沒有看到任何簡單的bootJar任務配置,也沒有成功嘗試基于bootJar.
更新:以下是基于 Francisco Mateo 的回答的解決方案。
configurations {
integrationImplementation.extendsFrom implementation
integrationRuntimeOnly.extendsFrom runtimeOnly
//...
}
dependencies {
// ...
integrationRuntimeOnly 'com.h2database:h2'
// ...
}
sourceSets {
integration {
compileClasspath = sourceSets.main.output
runtimeClasspath = sourceSets.main.output
}
}
tasks.register("integrationBootJar", BootJar) {
description = "Assembles an executable JAR archive to be used for integration tests of other projects containing the main classes, their dependencies, and any other integrationImplementation or integrationRuntimeOnly dependencies."
group = 'build'
classpath = sourceSets.main.runtimeClasspath.plus(sourceSets["integration"].runtimeClasspath)
mainClass.set("${jarMainClass}") // TODO can pull from bootJarMainClassName or bootRunMainClassName like bootJar?
archiveClassifier.set("integration")
shouldRunAfter bootJar
}
assemble.dependsOn integrationBootJar
uj5u.com熱心網友回復:
您需要基本上復制 Spring Boot 插件的創建方式,如源代碼bootJar中所示。大多數邏輯都包含在任務本身中,因此您所要做的就是創建另一個任務型別并稍作修改,主要是添加不屬于主 JAR 的附加依賴項。BootJar
完整示例(未經測驗):
import org.springframework.boot.gradle.plugin.SpringBootPlugin
import org.springframework.boot.gradle.tasks.bundling.BootJar
plugins {
id("org.springframework.boot") version "2.6.4"
id("java")
}
group = "io.mateo"
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
repositories {
mavenCentral()
}
sourceSets {
register("integrationTest") {
compileClasspath = sourceSets.main.get().output
runtimeClasspath = sourceSets.main.get().output
}
}
val integrationTestImplementation by configurations.getting {
extendsFrom(configurations.implementation.get())
}
dependencies {
implementation(platform(SpringBootPlugin.BOM_COORDINATES))
implementation(platform("org.springframework.cloud:spring-cloud-dependencies:2021.0.1"))
implementation("org.springframework.boot:spring-boot-starter-web")
integrationTestImplementation("org.apache.commons:commons-lang3:3.12.0")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks {
test {
useJUnitPlatform()
}
register("integrationTestBootJar", BootJar::class) {
description = "Assembles an integration test executable JAR archive containing the main classes and their dependencies."
group = BasePlugin.BUILD_GROUP
classpath = sourceSets.main.get().runtimeClasspath.plus(sourceSets["integrationTest"].runtimeClasspath)
mainClass.set("io.mateo.springdemo.SpringdemoApplication")
archiveClassifier.set("integration-test")
}
}
上面的集成測驗配置其實是取自 Gradle 檔案的一個例子:https ://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests
在tasks { }您可以看到集成測驗特定 Boot JAR 的創建位置與 Spring Boot 插件創建的方式相同bootJar。但是,這里的主要區別是添加了集成測驗運行時類路徑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/441967.html
上一篇:在新版本的android中找不到ID為“androidx.navigation.safeargs”的插件
下一篇:Android錯誤:AAPT:錯誤:找不到資源drawable/ic_bot(akacom.example.chatbot:drawable/ic_bot)
