java - 我可以使用 gradle 检索测试数据依赖项吗?

标签 java gradle nexus artifactory

假设我在基于 Java 的 Gradle 项目中有一个测试用例,需要提供图像才能完成,并且该图像较大(~100MB)。例如,测试可能需要从图像中读取像素数据,以便确认某些 CV 算法是否一致完成。只需将此数据添加到项目中的目录(例如 src/test/data)中,并将数据与其他所有内容一起 checkin 版本控制中,这将是非常简单的,但这使得存储库非常大,并且需要副本图像也可以 checkin 所有其他希望使用它的项目。

有没有办法打包这个镜像,以便可以将其添加到网络存储库(例如 Nexus 或 Artifactory),然后使用 Gradle 依赖机制拉入项目?如果是这样,我将如何从测试用例中引用图像?

编辑:这是我最终采用的解决方案。

  1. 发布包含测试数据的 Artifactory 。在本例中,我决定将多个测试图像实际捆绑到一个 zip 文件中并像这样发布。
  2. 将以下内容添加到我的 gradle.build 文件中:

    configurations {
        testData
    }
    
    dependencies {
        testData group: 'com.company', name: 'testData', version: '1.0', ext: 'zip'
    }
    
    task unzip(type: Copy) {
        def outputDir = file("${buildDir}/unpacked/dist")
    
        from {zipTree(configurations.testData.singleFile)}
        into outputDir
    }
    
    test {
    dependsOn unzip
        systemProperties 'testDataDir': file("${buildDir}/unpacked/dist")
    }
    

    这将添加一个新配置来保存测试数据,以及一个新任务来解压缩数据。请注意,zipTree(configurations.testData.singleFile) 周围的括号很重要,因为它们创建了一个闭包,确保路径仅在构建时解析。如果没有它们,每当运行构建脚本时都会下载测试数据,而不仅仅是在测试任务时下载。其中的最后一个 block 将测试任务配置为依赖于解压缩任务,然后将文件的位置作为系统属性传递到测试中。您可以使用 System.getProperty("testDataDir") 读取测试文件中的属性。由于解压任务被设置为测试任务的依赖项,因此只有在执行测试任务时才会下载并解压该文件。这可以保持正常构建的速度。

最佳答案

是的,有很多方法可以实现这一点。例如,您可以将镜像发布到 Nexus 并使用 Gradle 的常规依赖项管理来解析它(例如使用仅 Artifactory 符号 "some.group:someArtifact:1.0@img")。然后,您可以配置 test 任务以通过系统属性将图像的本地文件路径传递给测试。或者,您可以将图像放在测试运行时类路径上,并通过 ClassLoader#getResource 访问它。

关于java - 我可以使用 gradle 检索测试数据依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21270925/

相关文章:

java - 在现有项目结构上设置gradle

gradle - 将 Gradle 5.3.1 升级到 6.5。旧版本下载依赖项正常,但在 6.5 上失败

linux - 过滤快照版本

Nexus:名为 "Storage facet cleanup"的未知任务

java - 仅在部分 html 文档中的链接中替换 &

java - 相同 instanceof 但不同类的方法不可见性

java - 在 IntelliJ 中自定义默认 getter/setter 模板

android - React Native 和 build.gradle

java - 创建 .desktop 文件时出现问题,CentOS

java - 从 gradle 发布到 nexus 时出现身份验证错误