将gradle从4.4更新到5.4,使joda与时间相关
嗨,我已经将一个项目从4.4迁移到gradle版本5.4。此后,将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(字
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时间库谢谢比约恩·维斯特,因为你猜到底发生了什么。我会尽力按照你的建议解决这个问题。