将gradle从4.4更新到5.4,使joda与时间相关

将gradle从4.4更新到5.4,使joda与时间相关,gradle,compiler-errors,dependencies,jodatime,Gradle,Compiler Errors,Dependencies,Jodatime,嗨,我已经将一个项目从4.4迁移到gradle版本5.4。此后,gradlew build返回如下错误 …ConvTable.java:6:错误:包org.joda.time不存在 导入org.joda.time.DateTime …ConvetService.java:5:错误:包org.joda.time不存在 导入org.joda.time.DateTime …ConvetService.java:34:错误:找不到符号 ConvTableP getLastCononTableDate(字

嗨,我已经将一个项目从4.4迁移到gradle版本5.4。此后,
gradlew build
返回如下错误

…ConvTable.java:6:错误:包org.joda.time不存在
导入org.joda.time.DateTime

…ConvetService.java:5:错误:包org.joda.time不存在
导入org.joda.time.DateTime

…ConvetService.java:34:错误:找不到符号
ConvTableP getLastCononTableDate(字符串fromCurrency,字符串toCurrency,DateTime-dateTimeZone)抛出IOException

符号:类日期时间
位置:接口转换服务
注意:某些输入文件使用或覆盖不推荐使用的API。
注意:使用-Xlint重新编译:详细信息不推荐

*出了什么问题:
任务“: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" 
}


我的猜测是,作为升级的一部分,您使用
实现更改了
编译
配置。与新配置的区别之一是,依赖项不会作为编译类路径的一部分暴露给使用项目。其思想是,您放入
实现中的依赖项是特定于实现的,不应该“泄漏”到消费项目中。当使用增量编译时,这会加快构建速度,因为依赖类只有在公共API发生更改而内部实现没有更改时才会重新编译。也有理由在项目之间提供更松散的耦合,尽管这有点主观。不过,
实现
依赖项仍将是
运行时类路径
配置的一部分,并在配置中解决

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

有两种方法可以解决这个问题。如果将Joda用作
x-core
的公共API的一部分,则需要使用
API
配置而不是
实现来声明它(如果尚未使用
java库
插件)。这将使Joda成为依赖项目编译类路径的一部分


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

一些上下文会有所帮助。你的build.gradle文件是什么样子的?@BjørnVester用更多的gradle文件内容更新了这个问题。x-core使用了这个joda时间库谢谢比约恩·维斯特,因为你猜到底发生了什么。我会尽力按照你的建议解决这个问题。