gpt4 book ai didi

gradle - 从5.1.1升级到6.4.1后,gradle不会获取依赖项

转载 作者:行者123 更新时间:2023-12-03 03:44:51 26 4
gpt4 key购买 nike

我有几个将gradle 5.1.1与Java 8结合使用的服务。

由于我们要升级到Java 13,因此首先需要升级到gradle 6,因此不会获取某些依赖项。

这些依赖项用compile()在依赖项下列出,该依赖项是我们的jar库,仍然使用gradle 5.1.1构建。

我们的库存储在S3存储桶中,我们使用shadowjar生成结束jar。

这样,例如:

我有要升级的项目A。
项目A将项目B作为依赖项(编译)
项目B具有Google Guava 作为依赖项(也具有编译功能)

现在,项目A,在gradle 5.1.1下成功获取了 Guava ,没有问题,提醒我升级到gradle 6后缺少了 Guava 。

我使用本地计算机安装的gradle(而不是包装器)。

以下是重要的build.gradle部分:

buildscript {

repositories {
jcenter()
maven {
url "https://plugins.gradle.org/m2/"
}
}

ext.ver = [
'springboot': '2.2.0.RELEASE',
'slf4j' : '1.7.12'
]

dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${ver.springboot}"
classpath 'io.spring.gradle:dependency-management-plugin:1.0.7.BUILD-SNAPSHOT'
classpath 'com.github.jengelman.gradle.plugins:shadow:5.2.0'
classpath 'com.amazonaws:aws-java-sdk-core:1.11.5'
}
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

compileJava {
sourceCompatibility = JavaVersion.VERSION_1_8
}

configurations {
compile.exclude module: 'spring-boot-starter-logging'
testCompile.exclude module: 'spring-boot-starter-logging'
runtime.exclude module: 'spring-boot-starter-logging'

compile.exclude group: 'ch.qos.logback'
}

configurations.all {
resolutionStrategy.cacheDynamicVersionsFor 10, 'seconds'
resolutionStrategy.cacheChangingModulesFor 10, 'seconds'
}

dependencyManagement {
applyMavenExclusions = false
}

repositories {
mavenLocal()
maven {
url "s3://bucket"
credentials(AwsCredentials) {
accessKey = awsCredentials.AWSAccessKeyId
secretKey = awsCredentials.AWSSecretKey
}
metadataSources {
artifact()
}
}
mavenCentral()
}


dependencies {
compile("com.test:projectB:1.0.0")
...
}

import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer

shadowJar {
classifier = ''
baseName = 'project-A'
manifest {
attributes 'Main-Class': 'com.test.projectA.Starter'
}
mergeServiceFiles()
append 'META-INF/spring.handlers'
append 'META-INF/spring.schemas'
append 'META-INF/spring.tooling'
transform(PropertiesFileTransformer) {
paths = ['META-INF/spring.factories']
mergeStrategy = "append"
}
}


这可能是因为项目B不是用新的Gradle构建的吗?

不幸的是,我无法创建真正的复制器,因为这些库是我所工作公司的真实代码。

感谢致敬,
我做

最佳答案

metadataSources存储桶Maven存储库中的s3声明很可能是无法解决projectB的传递依赖关系的根本原因。 documentation在这里有点模糊,但是我怀疑artifact()仅查找实际的jar文件,而不查找POM文件,因此不会执行传递依赖项解析。使用--info--refresh-dependencies开关运行构建时,您应该能够看到此行为。

值得庆幸的是,这很容易解决。添加mavenPom(),Gradle将首先尝试解决POM,并且依赖关系解析应恢复正常。

在使用它时,您可能需要阅读upgrading from Gradle 5 guide并摆脱compile配置,而转向implementation。使用--warning-mode all运行构建时,您应该能够看到与此类似的警告:

The compile configuration has been deprecated for dependency declaration. This will fail with an error in Gradle 7.0. Please use the implementation or api configuration instead. Consult the upgrading guide for further information: https://docs.gradle.org/6.4.1/userguide/upgrading_version_5.html#dependencies_should_no_longer_be_declared_using_the_compile_and_runtime_configurations

关于gradle - 从5.1.1升级到6.4.1后,gradle不会获取依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61905787/

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