“您使世界变得更加美好,每天改进成为自己的最佳版本。”罗伊·贝内特(Roy T. Bennett),心中的光
在第三篇文章中,我们将讨论使用Ben Manes Gradle Versions Plugin管理版本。这将有助于我们通过更新的依赖来保持项目。
我们还将讨论它可能造成的问题,以及为什么我们没有Continuous Integration流可以给我们带来巨大的头痛。
最后,我将谈论Dependabot。我没有应用这个项目,但是我会放置积压,也许在另一篇文章中写。本文是RIE的一部分,下面可以找到lista completa de artigos。
我们基于@viniciusfcf的Desenvolvimento web com Quarkus课程。
我们正在使用的重新定位是:
时间过去,时间飞
时间是无情的!变化不断发生,这影响了我们做出的过去决策。
在软件开发领域,这位母亲仍然存在!图书馆和框架已更新或中断;其他时候,我们可以在依赖性中找到一个漏洞,并被迫执行更改(我们将在未来的名为Gradle插件的帖子中进行一些讨论:验证依赖关系依赖性检查的漏洞)。 p>
我们拥有的第一个想法之一是:让我们始终离开项目的最后版本!
“对于每个复杂的问题,总是有一个简单,优雅和完全错误的解决方案。” H L Mencken
我们在第一种方法中可能会有什么问题?
更新对项目的依赖是重要的,例如:
- 有一个支持团队需要确保我们使用的图书馆符合企业架构?
- 如果所有图书馆都为其最后版本更新,我们正在正确使用工作?
- 实现解决方案的服务器具有对此类库的支持?
- 等等。
在这篇文章中,我将谈论此更新的策略,重要的是要强调,这并不是所有项目的银色子弹,并且与团队,建筑团队一起唤醒决策总是很好和/或领导。
使用插件
gradle 的一个非常有趣的插件是Ben Manes的Gradle Versions Plugin。它的应用程序非常简单。
使用我们的projeto de referência,在我们的 build.gradle file中,我们可以看到以下内容:
plugins {
...
id "com.github.ben-manes.versions" version "$versionsVersion" apply false
...
}
...
subprojects {
if (it.name != 'applications') {
...
apply from: "$rootDir/plugins/docs.gradle"
...
}
}
插件/docs.gradle 最好在下面解释的配置。
如果您在课程中有这些 $ ,请看一下我们谈论项目的post anterior 。
配置的第一部分可以帮助我们通过以下 gradle :
寻求所有库的更新
foo@bar:~$ ./gradlew dependencyUpdates
运行任务我们将获得类似的结果:
./gradlew dependencyUpdates
------------------------------------------------------------
:applications:cadastro Project Dependency Updates (report to plain text file)
------------------------------------------------------------
The following dependencies are using the latest milestone version:
- com.approvaltests:approvaltests:18.5.0
- com.github.database-rider:rider-cdi:1.35.0
- com.github.database-rider:rider-core:1.35.0
- com.google.code.gson:gson:2.10
- org.mapstruct:mapstruct:1.5.3.Final
- org.mapstruct:mapstruct-processor:1.5.3.Final
- stax:stax:1.2.0
The following dependencies have later milestone versions:
- io.opentracing.contrib:opentracing-jdbc [0.2.4 -> 0.2.15]
https://github.com/opentracing-contrib/java-jdbc
- io.quarkus:io.quarkus.gradle.plugin [2.14.3.Final -> 3.0.0.Alpha2]
- io.quarkus:quarkus-arc [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-arc-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-config-yaml [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-config-yaml-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-core-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-flyway [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-flyway-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-orm-panache [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-orm-panache-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-validator [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-validator-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-jdbc-postgresql [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-jdbc-postgresql-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-junit5 [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-resteasy-jsonb [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-resteasy-jsonb-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-jwt [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-jwt-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-metrics [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-metrics-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-openapi [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-openapi-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-opentracing [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-opentracing-deployment [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus
- io.quarkus.platform:quarkus-bom [2.14.3.Final -> 3.0.0.Alpha2]
https://github.com/quarkusio/quarkus-platform
- io.rest-assured:rest-assured [4.5.1 -> 5.3.0]
http://code.google.com/p/rest-assured
- org.testcontainers:postgresql [1.17.5 -> 1.17.6]
https://testcontainers.org
Gradle release-candidate updates:
- Gradle: [7.6: UP-TO-DATE]
------------------------------------------------------------
在这种情况下,我删除了与其他子项目相关的日志,仅具有较低的结果。
我们可以看到,例如,我们的项目中更新了以下依赖性:
The following dependencies are using the latest milestone version:
- com.approvaltests:approvaltests:18.5.0
- com.github.database-rider:rider-cdi:1.35.0
- com.github.database-rider:rider-core:1.35.0
- com.google.code.gson:gson:2.10
- org.mapstruct:mapstruct:1.5.3.Final
- org.mapstruct:mapstruct-processor:1.5.3.Final
- stax:stax:1.2.0
并且 opentracing-jdbc 的依赖性已过时:
The following dependencies have later milestone versions:
- io.opentracing.contrib:opentracing-jdbc [0.2.4 -> 0.2.15]
- io.quarkus:io.quarkus.gradle.plugin [2.14.3.Final -> 3.0.0.Alpha2]
大多数时候,我们不希望版本的库, alpha 或 beta 在我们的项目中,因为它们是最终版本,并且可能包含未来的变化。为了解决此问题,其他插件为我们提供了一个解决方案。在我们的情况下,我们可以在插件/docs.gradle 中找到它们;我已经评论了它们,以突出以前的问题:
apply plugin: "com.github.ben-manes.versions"
...
dependencyUpdates {
checkForGradleUpdate = true
outputFormatter = "json"
outputDir = "build/reports/docs/dependencyUpdates"
reportfileName = "report"
resolutionStrategy = {
componentSelection { rules ->
rules.all { ComponentSelection selection ->
boolean rejected = ["alpha", "beta", "rc", "cr", "m"].any { qualifier ->
selection.candidate.version ==~ /(?i).*[.-]${qualifier}[.\d-]*/
}
if (rejected) {
selection.reject("Release candidate")
}
}
}
}
}
再次运行任务,我们对的结果:应用程序:注册如下:
./gradlew dependencyUpdates
------------------------------------------------------------
:applications:cadastro Project Dependency Updates (report to plain text file)
------------------------------------------------------------
The following dependencies are using the latest milestone version:
- com.approvaltests:approvaltests:18.5.0
- com.github.database-rider:rider-cdi:1.35.0
- com.github.database-rider:rider-core:1.35.0
- com.google.code.gson:gson:2.10
- io.quarkus.platform:quarkus-bom:2.14.3.Final
- org.mapstruct:mapstruct:1.5.3.Final
- org.mapstruct:mapstruct-processor:1.5.3.Final
- stax:stax:1.2.0
The following dependencies have later milestone versions:
- io.opentracing.contrib:opentracing-jdbc [0.2.4 -> 0.2.15]
https://github.com/opentracing-contrib/java-jdbc
- io.quarkus:io.quarkus.gradle.plugin [2.14.3.Final -> 2.15.0.Final]
- io.quarkus:quarkus-arc [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-arc-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-config-yaml [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-config-yaml-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-core-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-flyway [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-flyway-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-orm-panache [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-orm-panache-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-validator [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-hibernate-validator-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-jdbc-postgresql [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-jdbc-postgresql-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-junit5 [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-resteasy-jsonb [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-resteasy-jsonb-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-jwt [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-jwt-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-metrics [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-metrics-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-openapi [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-openapi-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-opentracing [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.quarkus:quarkus-smallrye-opentracing-deployment [2.14.3.Final -> 2.15.0.Final]
https://github.com/quarkusio/quarkus
- io.rest-assured:rest-assured [4.5.1 -> 5.3.0]
http://code.google.com/p/rest-assured
- org.testcontainers:postgresql [1.17.5 -> 1.17.6]
https://testcontainers.org
Gradle release-candidate updates:
- Gradle: [7.6: UP-TO-DATE]
------------------------------------------------------------
解决的库更新问题? - 只是去我们的 gradle.properties 准备好。
我们所做的只是一种突出显示哪些库已过时的方法。
在更改所有出现过时的版本之前,重要的是要验证它是否不会影响我们项目的其他库。在许多情况下,图书馆使用其他库,我们称之为 transitive依赖性。这样,要使图书馆正常工作很重要,其的及时性取决于也是。
。以Spring Boot Starter Data JPA为例。我不会记得确切的啤酒,但是 java在版本8 中有很大的变化,其中添加了 option 。。
我记得当我使用版本插件来更改 Spring Boot的版本在我从事几年工作的另一个项目中,突然间我的服务课程突然开始给问题提供问题。调查时,我意识到某些妈妈的签名发生了变化,并且返回实体的发明是返回可选。
。在这种情况下,我能够更改我的认识,以使更新变得有意义,但是想象一下问题是否在我们在项目中拥有的< /strong>的类别中。 /p>
您如何解决知道影响依赖性或其他依赖性以及因此项目的更新的问题?我们可以尝试和错误,攀登我们的应用程序,看看它的所有流量是否继续起作用。但是它不会有更好的方法吗?
持续集成
在以后的帖子中,我们将讨论GitLab和管道。当我们谈论管道时,我们将讨论几个人项目中自动化过程的重要性。
我们能做的一种方法是,每当执行合并重新填充时,我们的测试阶段在管道上执行。
。我们现在可以更改库的版本,看看我们的测试是否没有破坏。对于这种方法,重要的是,我们信任我们的测试,并且在中覆盖了。
。当我说要信任我们的测试时,我指的是我们在项目中经常发现的以下测试:
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@QuarkusTest
public class Teste {
private int adicao(int a, int b) {
return a + b;
}
@Test
void deveAdicionar() {
Assertions.assertNotNull(adicao(1, 2));
}
}
assertenotnull 的测试可以使我们对座右铭的功能有假阳性。想象一下,例如,开发人员通过将整体更改为
来攀登版本
private int adicao(int a, int b) {
return a - b;
}
我们的测试不会破裂!使用 assertnotnull 与parsimãnia一起使用测试非常重要。
这只是可以更好地测试的测试的一个示例,但是想象一下,如果我们做出不突破的测试,那么当我们将其部署在生产不兼容中时。
我们可以遵循的一种方法,以了解我们是否有良好的测试是由@alexandreaquiles撰写的:
但是回到我们图书馆的更新,如果它具有比我们打开的合并请求更好的表格,那将是不好的?
?依赖关系
oDependabotâ©umasoluã§oque funciona com ruby , javascript , python , php , elixir , eLM , go , rust , java e .net 。
及其操作是对新版本的持续验证,并为配置的重新定位打开了 Merge Refukes 。我在这个项目中没有配置,但是您可以看到我创建的nesse outro repositório的想法。
这样,有可能批准或不批准 rebukes disterabot farâ远。
包括£o
项目的依赖性更新是项目中可能需要的过程,我们对于评估其对其他项目库的影响和后果很重要。
诸如Gradle Versions Plugin或Dependabot之类的解决方案可能是我们在此类版本更改中更加自信的过程的一部分,与 contine 等过程有关。。
这篇文章是关于课程的SA Rie的一部分,该课程形成了我的职业:与Quarkus的Web开发。
完整的Rie©:
- Talk is cheap show me the code
- Utilizando Gradle ao invés de Maven
- Gradle插件:带版本的库版
- Plugins do Gradle: Saudades do Maven, relatórios com Project-report
- Gradle插件:首先使用OpenAPI发电机。
- Gradle插件:首先使用OpenAPI发电机进行反应性API [未发布]
- gradle插件:使用OWASP依赖性检查依赖性验证[未发布]
- gradle插件:一尘不染的棉绒
- gitlab:选择的动机[未出版]
- gitlab:对管道中的修饰的考虑[未发布]
- gitmoji [未发布]
- SDK Man [未出版]
- pron©commit Hook [未发布]
- application.yml:在应用程序属性上使用YML [未发布]
- application.yml:使用环境有所不同[未发布]
- application.yml:在测试中抽泣选项[未发布]
- 映射:使用表达式映射[未发布]
- 缩影安全性:哭泣的tokenurl [未发布]
- Prometheus:简单的问题使我花了几个小时[未出版]
- quarkus-hibernate反应性剥离:在反应性项目中使用冬眠的优点[未发布]
- TestContainers:反应性项目的配置[未发布]