我正在创建一个具有多个模块的新Kotlin项目,当我尝试从IntelliJ IDEA运行其中一个模块时出现问题。
为了简化结构,我得到了module A
和module B
。
module B
配置并返回log4j2
Logger
实例。
module A
正在调用module B
方法来获取记录器,并在此之后直接使用 Logger 。
当我创建一个胖子罐并从module A
启动方法时,一切正常,并且日志记录正常,但是当我尝试从IntelliJ IDEA启动module A
方法时,我从Kotlin收到错误消息:< / p>
Error:(6, 29) Kotlin: Cannot access class 'org.apache.logging.log4j.Logger'. Check your module classpath for missing or conflicting dependencies
两个模块都是使用Gradle配置的,module A
的依赖项为module B
:
dependencies {
implementation(project(":moduleB"))
}
据我了解, IDEA 应该能够理解module B
的要求并在执行使用module B
的代码时自动加载它们,不是吗?
我想念什么吗?
答案 0 :(得分:0)
事实证明问题出在log4j
中的module B
声明中。
最初,它被声明为:
implementation("org.apache.logging.log4j:log4j-api:2.11.1")
因此,此依赖项未公开给module A
。
更改为:
compile("org.apache.logging.log4j:log4j-api:2.11.1")
不再产生错误。
奇怪的是,使用api
配置而不是compile
是行不通的(尽管根据文档,这些配置是相同的)。看起来当前的IDEA Gradle插件不支持新的配置命名。