Java 我可以使用gradle检索测试数据相关性吗?

Java 我可以使用gradle检索测试数据相关性吗?,java,gradle,nexus,artifactory,Java,Gradle,Nexus,Artifactory,假设我在一个基于Java的Gradle项目中有一个测试用例,该项目需要一个映像才能完成,并且映像比较大(~100MB)。例如,测试可能需要从图像中读取像素数据,以便确认某些CV算法正在一致地完成。只需将此数据添加到项目中的一个目录(如src/test/data)中,并将数据与其他所有内容一起签入版本控制,这将非常简单,但这会使存储库非常大,并且需要将映像的副本签入希望使用它的每个其他项目中 是否有一种方法可以打包此映像,以便将其添加到网络存储库(如Nexus或Artifactory)中,然后使用

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

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

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

  • 发布包含测试数据的工件。在本例中,我决定实际上将多个测试图像捆绑到一个zip文件中,并像这样发布它
  • 将以下内容添加到my 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)
    周围的括号很重要,因为它们创建了一个闭包,以确保仅在构建时解析路径。没有它们,测试数据将在构建脚本运行时下载,而不仅仅是在测试任务运行时下载。其中的最后一个块将测试任务配置为依赖于解压任务,然后将文件的位置作为系统属性传递到测试中。您可以使用
    System.getProperty(“testDataDir”)
    读取测试文件中的属性。因为解压任务被设置为测试任务的依赖项,所以只有在执行测试任务时才会下载和解压文件。这可以保持正常的构建速度


  • 是的,有很多方法可以做到这一点。例如,您可以将映像发布到Nexus,并使用Gradle的常规依赖关系管理(例如,使用仅工件符号
    “some.group:someArtifact:1)解析它。0@img“
    )。然后,您可以配置
    test
    任务,通过系统属性将映像的本地文件路径传递给测试。或者,您可以将映像放在测试运行时类路径上,并通过,比如,
    ClassLoader\getResource

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

    访问它,正如Peter所说,将其添加为配置依赖项

    image "some.group:someArtifact:1.0@img"
    
    在gradle脚本中,将其引用为

    configuration.image.singleFile.getPath()
    

    正如Peter所说,将其添加为配置依赖项

    image "some.group:someArtifact:1.0@img"
    
    在gradle脚本中,将其引用为

    configuration.image.singleFile.getPath()