我们正在考虑从Maven迁移到Gradle,并且已经完成了替换父POM概念的大部分挑战。有一个棘手的问题我们还没有弄清楚。我们需要指定全局使用的Spring Boot版本,但我尝试过的两种解决方案都遇到了无效的构建文件问题:
plugins{id'org.springframework.boot'version'2.1.17.release'}
声明放在公共构建脚本中。生成错误,“只有项目和设置生成脚本可以包含插件{}块。”springbootversion
参数,并在插件声明中使用该参数。生成错误,“plugins{}块之前只允许buildscript{}和其他plugins{}脚本块,不允许其他语句”如果我可以简单地应用plugin:'org.springframework.boot'
,但是Gradle找不到这个插件,那么所有这些就会更容易。除了一个微服务外,所有的微服务都在Spring Boot的一个版本上,如果可能的话,我们希望能够在全球范围内升级。
附加信息
repositories {
mavenLocal()
/* Removed our internal repositories */
jcenter()
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'maven-publish'
apply plugin: 'io.spring.dependency-management'
group = 'nedl-unified-platform'
/* Required to publish Spring Boot microservices to publish to repository */
configurations {
[apiElements, runtimeElements].each {
it.outgoing.artifacts.removeIf { it.buildDependencies.getDependencies(null).contains(jar) }
it.outgoing.artifact(bootJar)
}
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
withJavadocJar()
withSourcesJar()
}
ext {
set('springBootVersion', '2.1.17.RELEASE')
set('springCloudVersion', "Greenwich.SR6")
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
jacoco {
toolVersion = "0.8.5"
reportsDir = file("$buildDir/reports/jacoco")
}
test {
finalizedBy jacocoTestReport // report is always generated after tests run
}
jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = 0.2
}
}
}
}
jacocoTestReport {
dependsOn test // tests are required to run before generating the report
reports {
xml.enabled true
html.destination file("${reportsDir}/jacocoHtml")
xml.destination file("${reportsDir}/jacocoReport.xml")
}
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
publishing {
publications {
maven(MavenPublication) {
from components.java
}
}
repositories {
/* excluded for privacy and brevity's sake, our internal Maven repo */
}
}
plugins {
id 'org.springframework.boot' version springBootVersion
}
apply from: "https://mycentral.repo/project-common/develop/build.gradle"
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
implementation 'ch.qos.logback:logback-classic'
implementation 'javax.annotation:javax.annotation-api:1.3.2'
implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
implementation 'org.glassfish.jaxb:jaxb-runtime:2.4.0-b180830.0438'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
version = '0.0.2-SNAPSHOT'
我认为这里的差距在于,在maven中,您有父POM
的概念,而在Gradle中,您没有。没有1:1的映射,就像你说的,但你可以在Gradle中有插件,并应用一个插件。
最接近的方法是开发自己的Gradle插件,每个项目都可以应用。然后,您的自定义插件将配置Spring Boot和所有项目通用的其他配置。这个插件将定义您希望所有其他项目使用的Spring Boot版本。
如果定制插件只关心配置Spring Boot,那么它还需要做其他事情。当你没有足够的经验时,创建一个分级插件是很困难的。您将失去build.gradle
的所有熟悉语法,您必须真正地编写代码(有一些相似之处,但我发现这很难),如果可能,我将避免它。
我不确定我是否理解您全局定义的Spring版本需求。除非你正在使用快照依赖项/插件(坏的,不要这样做),(或者一个黑魔法设置.gralde在你的repo之外),你将不得不把一些版本放在某个地方。作为另一种选择,您可以创建自己的自定义任务,该任务在check
生命周期上运行,它将检查spring(或插件)的版本,如果它不是最新版本,则打印一个警告,并鼓励开发人员升级。
可以将属性添加到gradle.properties
中,作为springbootversion=2.1.17.release
。
问题内容: 我试图切换一些硬编码的查询以使用参数化输入,但是遇到一个问题:如何格式化参数化批量插入的输入? 当前,代码如下所示: 一个可能的解决方案(从如何将数组插入到一个带有PHP和PDO的单个MySQL Prepared语句中 修改而来)似乎是: 有没有更好的方法来完成带有参数化查询的批量插入? 问题答案: 好吧,您有三个选择。 一次构建-执行多次。基本上,您只需为一行准备一次插入,然后循环执
问题内容: 考虑以下Pytest: 该测试使用Pytest固定装置,其本身具有属性。在测试中迭代该属性,以便仅在每个in的断言均成立的情况下测试才通过。 但是,我实际上想做的是生成3个测试,其中2个应该通过,其中1个将失败。我试过了 但这导致 据我了解,在Pytest固定装置中,函数“成为”其返回值,但是在对参数进行参数化时,这似乎尚未发生。如何以所需的方式设置测试? 问题答案: 从 pytest
我有一些代码,我不希望包含在jar文件基于一个条件。 我的构建脚本看起来像 现在,当我运行脚本时,除了危险的java文件,所有文件的绝对路径都被打印出来,但它们仍然包含在jar中。 如果我删除启动插件并运行任务,危险的类文件仍然包含在jar中。 如果我在jar任务中添加一个子句,则不会打印危险文件,它们也不会包含在jar中。 如果我启用启动插件,并使用bootJar任务(它继承自Jar任务)(),
我对Spring还不熟悉,对它能做些什么还只是初步了解。 在这种情况下,我需要使用注释设置一个循环任务。速率被指定为对象中的成员字段,该对象被传递给封装表示任务的方法的类。 我使用了允许访问配置或环境的机制,例如;这很有效。 我不知道如何做的是将对象中的值插入到中。 例如: 当然,上面的代码不起作用,我只是举一个例子来说明我要做的事情。 如有任何建议,将不胜感激。
问题内容: 您如何访问“工作流程” Jenkins作业的“此构建已参数化”部分中的设置? 测试用例 创建一个工作流作业。 启用“此构建已参数化”。 添加具有默认值的STRING PARAMETER 。 将以下代码添加到: 运行工作。 结果 问题答案: 我认为使用Workflow插件时,变量可以直接使用,而不是通过env。尝试:
问题内容: 我有一个数据类型: 另外,数据库字段类型是 现在我正在这样做: 如何才能做到这一点。 问题答案: 使用