当前位置: 首页 > 知识库问答 >
问题:

Spring靴2。x使用gradle重新打包集成测试

柯奕
2023-03-14

我将我们的应用程序从SpringBoot1.5迁移到SpringBoot2.2。我正在为我们的渐变身材而挣扎。在过去,我们使用以下方法获得一个包含所有Spring依赖项的可执行Jar文件,以分别在CI管道中运行集成测试:

task integrationBootRepackage(type: BootRepackage, dependsOn: integrationJar) {
  enabled = true
  withJarTask = integrationJar
  customConfiguration = "integrationRuntime"
  mainClass = "io.test.IntegrationApplicationKt"
}
assemble.dependsOn integrationBootRepackage

集成Jar任务用我们的集成测试类和主类构建一个基本jar。在过去,我们能够通过重新打包任务“增强”这个罐子。但是在Spring Boot 2.2中,此任务不再存在。Spring文档只告诉您如何构建主JAR。

与Maven重新包装似乎仍然可用,因为以下部分是在Spring Maven插件留档中提到:

如果希望以替换主工件的相同方式重新打包次要工件,也可以使用相同的配置。以下配置使用重新打包的应用程序安装/部署单个任务分类工件:

有人知道为什么Maven仍然可以重新打包,而gradle却不能?还是我没有找到合适的文档?

我还尝试了其他方法,比如直接从BootJar继承integrationJar任务,但它没有将spring依赖项放入jar中。

val integrationJar = tasks.register("integrationJar", BootJar::class) {
  description = "Assembles a jar archive containing the integration classes."
  group = "build"
  mainClassName = "io.test.IntegrationApplicationKt"
  archiveAppendix.set("integration")

  from(sourceSets!!["main"].output)
  from(sourceSets["integration"].output)
}

有谁能提供一些帮助,帮助我如何使用SpringBoot2.2实现Spring重新打包的integrationJar文件,以及如何使用Kotlin DSL实现gradle

共有1个答案

牛枫
2023-03-14

您必须查看SpringBootGradle插件的文档。具体见第4.1节。包装可执行的罐子。

可以使用bootJar任务构建可执行jar。该任务是在应用java插件时自动创建的,是BootJar的一个实例。汇编任务自动配置为依赖于bootJar任务,因此运行汇编(或构建)也将运行bootJar任务。

您还可以执行可执行战争或可执行和可部署战争。

 类似资料:
  • 我第一次使用Spring Boot,正在为我的应用程序设置分布式跟踪。我已经将Spring Cloud Slueth添加到我的应用程序中,当调用我的endpoint时,我可以看到生成的跨度和跟踪,但是我很难让它与Aws Sdk 2. x集成(使用Dynamo异步客户端)。我有几个关于集成的问题: 通过aws sdk跟踪http调用的最佳方式是什么。我能做到这一点的唯一方法是实现ExecutionI

  • 我试图在Spring Boot项目中与Hibernate和Spring JPA集成Flyway for Migration。我遇到以下异常: 我正在使用Hibernate和一个配置java文件,用于postgres(开发阶段)和h2(本地)。签名是这样的: 我找不到关于我在这个问题中描述的问题的任何东西。有人能帮忙吗?

  • 任何人都可以向我展示或指出一个不使用Spring引导 gradle 插件的Spring引导 gradle 项目。 我正在寻找一个类似springbootstarterwebhelloworld的例子,它不使用gradle插件。 我无法想象插件是一个需求,但搜索示例似乎都依赖于gradle插件,这在我的环境中不是一个选项,不,我也不能切换到maven。 理想情况下,gradle构建将通过添加以下内容

  • 当我运行命令gradle war integrationTest时,集成测试失败,因为它在服务项目中找不到上下文侦听器。错误消息的片段如下: 对此我们非常感谢您的帮助。提前致谢

  • 我试图使用Gradle的标志运行单个集成测试。我添加了另一个源代码集,并将测试放入其中。我有一个集成测试任务 这运行得很好,但是如果我尝试运行一个测试,它会告诉我它找不到匹配的测试。我不想每次编写一个新的集成测试时都必须运行每个集成测试。有办法做到这一点吗?

  • Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6