如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Gradle 和 JUnit 5 仅运行特定测试?
gradle:配置IDEA(配置文件使用本地仓库使用gradle新建一个web工程分模块)
在 JUnit5 中使用 Testcontainers 和 gradle 时无法解析 'DockerImageName' 中的方法 'parse'