gradle - 将 gradle 从 4.4 更新到 5.4 导致 joda-time 依赖问题

标签 gradle compiler-errors dependencies jodatime

嗨,我已经将一个项目从 4.4 迁移到了 gradle 版本 5.4。从此gradlew build返回错误如下。
....ConvTable.java:6: error: package org.joda.time does not exist import org.joda.time.DateTime;...ConvetService.java:5: error: package org.joda.time does not exist import org.joda.time.DateTime;...ConvetService.java:34: error: cannot find symbol ConvTableP getLastCononTableDate(String fromCurrency, String toCurrency, DateTime dateTimeZone) throws IOException;symbol: class DateTime location: interface ConvetService Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details* What went wrong: Execution failed for task ':cur-api:compileJava'
gradle 文件如下所示。它是一个更大的子项目

apply plugin: "j-library" 
apply plugin: "m-publish" 

group = "com.t.cur" 

sourceCompatibility = JavaVersion.VERSION_1_7 
targetCompatibility = JavaVersion.VERSION_1_7 

publishing { publications { mavenJava(MavenPublication) { } } 

repositories { 
  maven { url "${mv_repo_url}" } } 
} 

dependencies { 
  implementation "com.t.com:x-core:1.0.0" 
  implementation "commons-lang:commons-lang:2.6" 
}

最佳答案

我的猜测是,作为升级的一部分,您更改了 compile implementation 的配置.与新配置的区别之一是依赖项不会作为编译类路径的一部分暴露给消费项目。这个想法是您放入 implementation 的依赖项是特定于实现的,不应“泄漏”到消费项目上。当使用增量编译时,这会加快构建速度,因为仅当公共(public) API 更改而不是内部实现时,才会重新编译依赖类。还有一个案例可以在项目之间提供更松散的耦合,尽管这有点主观。 implementation依赖关系仍将是 runtimeClasspath 中的一部分并已解决。虽然配置。

所以(假设这是原因的根本问题),依赖 x-core用于提供 Joda 作为编译的传递依赖。但情况已不再如此。

有两种方法可以修复它。如果您使用 Joda 作为 x-core 的公共(public) API 的一部分,您需要使用 api 声明它配置而不是 implementation (如果您还没有,请使用 java-library 插件)。这将使 Joda 成为依赖项目的编译类路径的一部分。

另一方面,如果这个子项目恰好也使用了 Joda,但与 x-core 完全无关。 ,您也应该在此处将其声明为依赖项(使用与以前相同的规则作为 implementationapi)。

关于gradle - 将 gradle 从 4.4 更新到 5.4 导致 joda-time 依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101639/

相关文章:

android - 将Fabric完全迁移到Firebase

maven - Gradle依赖解析总是首先尝试mavenCentral?

Swift 开关默认 + fallthrough : missing return in a function expected to return 'String'

c++ - 模板类依赖问题

java - 使用 Apache Avro 生成的文件构建错误

gradle - 如何默认排除某些任务?

java - 在java中,我期望返回必须捕获的值的方法调用不会抛出编译错误。为什么?

python - Python : IOError: [Errno 22] invalid mode ('r' ) or filename: '' [closed]

具有具有相同依赖项的不同版本的 nuget 包的 azure 函数

Java Gradle 构建 : NoClassDefFoundError