如何使用 Gradle 中的本地 JUnit Jar 而不是 Maven Central?

Posted

技术标签:

【中文标题】如何使用 Gradle 中的本地 JUnit Jar 而不是 Maven Central?【英文标题】:How to use local JUnit Jar from Gradle instead of Maven Central? 【发布时间】:2021-11-20 12:56:24 【问题描述】:

我正在尝试在无法访问 Internet 但我可以访问 SSH 并且可以同步本地文件等的环境中运行我的 JUnit 测试。

我以为我可以将我的 JUnit jar 添加到项目中,但这似乎不起作用(而且它似乎没有下载到我的 Maven 缓存中)。

理想情况下,我可以在可以访问 Internet 的开发机器上执行此操作 - 编译所有内容并同步

gradle assemble testClasses

简单示例

从这个https://github.com/spring-guides/gs-rest-service开始 编辑 build.gradle 以添加行以在本地抓取 Jars

将 JUnit jar 添加到“libs”文件夹,即 mkdir libs ;光盘库; wgethttps://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.7.2/junit-jupiter-engine-5.7.2.jar

plugins 
    id 'org.springframework.boot' version '2.5.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'


group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories 
    mavenCentral()


dependencies 
    compile fileTree(dir: 'libs', include: '*.jar')
    testCompile fileTree(dir: 'libs', include: '*.jar')
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation('org.springframework.boot:spring-boot-starter-test')


test 
    useJUnitPlatform()

但它不会在“libs”中寻找 JUnit jar - 它仍在尝试从 Maven Central 获取:

gradle 清洁测试

任务:测试失败

FAILURE:构建失败并出现异常。

出了什么问题:任务 ':test' 执行失败。

无法下载 junit-jupiter-engine-5.7.2.jar (org.junit.jupiter:junit-jupiter-engine:5.7.2) 无法获取资源“https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.7.2/junit-jupiter-engine-5.7.2.jar”。 > 无法获取“https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-engine/5.7.2/junit-jupiter-engine-5.7.2.jar”。 > repo.maven.apache.org:名称解析暂时失败

尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

通过https://help.gradle.org获得更多帮助

此版本中使用了已弃用的 Gradle 功能,使其 与 Gradle 7.0 不兼容。使用 '--warning-mode all' 显示 个别弃用警告。看 https://docs.gradle.org/6.8.3/userguide/command_line_interface.html#sec:command_line_warnings

在 4 秒内构建失败 4 个可操作的任务:4 个已执行

更新

Gradle 期望文件夹格式是什么?

这是我尝试过的

将我的 settings.gradle 更改为此

pluginManagement 
    repositories 
        maven 
            url './libs'
        
    

将所有 jar 复制到我的 libs 文件夹中

找到 . -name "spring2.5.2*jar" | xargs cp -t ~/complete/libs/

为了好玩,复制了整个文件夹 cp -rf ~/.gradle/caches/modules-2/files-2.1/ ~/complete/libs/

但是还是找不到Spring插件?

我的 libs 文件夹现在看起来像这样

$ ls libs
6.8.3                       org.assertj
ch.qos.logback                  org.codehaus.groovy
com.datastax.oss                org.eclipse.ee4j
com.fasterxml                   org.eclipse.jetty
com.fasterxml.jackson               org.glassfish.jersey
com.fasterxml.jackson.core          org.hamcrest
com.fasterxml.jackson.datatype          org.infinispan
com.fasterxml.jackson.module            org.jboss
com.google.code.findbugs            org.jetbrains.kotlin
com.jayway.jsonpath             org.jetbrains.kotlinx
com.oracle.database.jdbc            org.junit
com.sun.activation              org.junit.jupiter
com.vaadin.external.google          org.junit.platform
commons-codec                   org.mockito
commons-logging                 org.objenesis
dependency-management-plugin-1.0.11.RELEASE.jar org.opentest4j
files-2.1                   org.ow2
io.dropwizard.metrics               org.ow2.asm
io.micrometer                   org.skyscreamer
io.netty                    org.slf4j
io.projectreactor               org.sonatype.oss
io.prometheus                   org.springframework
io.r2dbc                    org.springframework.boot
io.rsocket                  org.springframework.data
io.spring.dependency-management         org.springframework.integration
io.spring.gradle                org.springframework.security
jakarta.activation              org.springframework.session
jakarta.annotation              org.tomlj
jakarta.xml.bind                org.xmlunit
jars-8                      org.yaml
journal-1                   spring-boot-2.5.2.jar
junit-jupiter-engine-5.7.2.jar          spring-boot-autoconfigure-2.5.2.jar
modules-2                   spring-boot-buildpack-platform-2.5.2.jar
net.bytebuddy                   spring-boot-gradle-plugin-2.5.2.jar
net.java.dev.jna                spring-boot-loader-tools-2.5.2.jar
net.minidev                 spring-boot-starter-2.5.2.jar
org.antlr                   spring-boot-starter-json-2.5.2.jar
org.apache                  spring-boot-starter-logging-2.5.2.jar
org.apache.commons              spring-boot-starter-test-2.5.2.jar
org.apache.httpcomponents           spring-boot-starter-tomcat-2.5.2.jar
org.apache.logging              spring-boot-starter-web-2.5.2.jar
org.apache.logging.log4j            spring-boot-test-2.5.2.jar
org.apache.tomcat.embed             spring-boot-test-autoconfigure-2.5.2.jar
org.apiguardian                 transforms-3

$ 分级测试

FAILURE:构建失败并出现异常。

其中:构建文件 '/Users/dennch3/tsmec/modules/e2etests/complete/build.gradle' 行:2

出了什么问题:在以下任何来源中都找不到插件 [id: 'org.springframework.boot', version: '2.5.2']:

Gradle 核心插件(插件不在 'org.gradle' 命名空间中) 插件存储库(无法解析插件工件 'org.springframework.boot:org.springframework.boot.gradle.plugin:2.5.2') 在以下存储库中搜索: maven(文件:~/complete/libs/)

【问题讨论】:

【参考方案1】:

你的问题不是 junit,要运行 gradle,你需要访问 maven 存储库以获取依赖项和 gradle 插件存储库(你有 spring boot)

您选择了 mavencentral(),但无法访问互联网,这将无法正常工作,您应该可以访问 maven 和 Gradle-plugins 的本地存储库。

如果您的库已经有 spring jar,则删除 spring 相关依赖项(第 3,4 行)

也从 testCompile 更改为 testImplementation (line2)

PS - 您可能还需要插件来添加本地存储库,请参阅https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories

【讨论】:

我尝试了“自定义插件存储库”,但 Gradle 似乎不像 - 必须有一些特殊的方式来组织该文件夹?我也试过只复制整个缓存,但这也不起作用?

以上是关于如何使用 Gradle 中的本地 JUnit Jar 而不是 Maven Central?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JUnit 5 与 Gradle 一起使用?

如何使用 Gradle 和 JUnit 5 仅运行特定测试?

gradle:配置IDEA(配置文件使用本地仓库使用gradle新建一个web工程分模块)

如何使用 Gradle 运行 JUnit 测试?

如何在Gradle中使用JUnit 5?

在 JUnit5 中使用 Testcontainers 和 gradle 时无法解析 'DockerImageName' 中的方法 'parse'