gpt4 book ai didi

java - 如何使用 Gradle 测试编译后的 JAR 文件

转载 作者:行者123 更新时间:2023-11-28 21:37:19 25 4
gpt4 key购买 nike

我有一段代码在标准单元测试期间执行时可以正常工作,但在编译到 jar 中并作为其他项目的依赖项添加时却无法正常工作。

找到根本原因并修复它不是问题,但我开始考虑如何在将它部署到任何地方之前测试新制作的 jar 工件,以确保它适用于最终用户和其他项目。我已经用谷歌搜索了这个主题几个小时,但甚至没有找到与之相近的内容。

也许我完全错了并试图实现一些奇怪的东西,但我想不出另一种方法来验证编译的包并确信它对其他人有用。

关于该项目的一些细节 - 简单的 Java 库,类很少,使用 Gradle 5.5 作为构建系统,使用 travis-ci 作为 CI/CD 工具,用于测试我使用的是 TestNG,但我可以轻松切换到 JUnit 如果它将被要求。

如果你对编译到包中时不起作用的代码感到好奇,这里是简化版本:

public String readResourceByURI() throws IOException, URISyntaxException
{
new String(Files.readAllBytes(Paths.get(ClassLoader.getSystemClassLoader().getResource("resource.txt").toURI())));
}

如果打包成jar文件,这个函数会抛出java.nio.file.FileSystemNotFoundException。但正如我所说,问题不在于代码......

理想情况下,我想创建一个构建管道,它将生成 jar 工件,然后对其进行测试,如果测试成功,这些 jar 将自动部署到存储库(maven 和/或 bintray)。

目前所有测试都在创建 jar 之前执行,因此有可能由于打包原因,jar 包中的编译代码将无法运行。

因此,为了简化我的问题,我正在寻找可以对新制作的 jar 文件执行单元测试的 Gradle 配置。

最佳答案

这就是我想出的:

test {

// Add dependency on jar task, since it will be main target for testing
dependsOn jar

// Rearrange test classpath, add compiled JAR instead of main classes
classpath = project.sourceSets.test.output + configurations.testRuntimeClasspath + files(jar.archiveFile)

useTestNG()
}

在这里,我通过将文件夹与测试类、运行时依赖项和已编译的 JAR 文件组合来更改测试任务的默认类路径。不确定这样做是否正确...

关于java - 如何使用 Gradle 测试编译后的 JAR 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56868055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com