WAR - Gradle 多模块应用 - TypeNotPresentException

WAR - Gradle multi-module app - TypeNotPresentException

我有一个 Gradle 模块结构类似于此的应用程序:

app模块应用了WAR插件。部署到远程服务器时,返回此异常:

Caused by: java.lang.TypeNotPresentException: Type [SomeClass] not present
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117)
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
    at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68)
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138)
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
    at sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:90)
    at java.lang.Class.getGenericSuperclass(Class.java:777)
    at org.kodein.di.TypeReference.<init>(types.kt:272)

显然,来自依赖模块的 类 没有以某种方式被带入 WAR(通过 Kodein 服务定位器使用公开)- 这不直观,因为那不会如果它被打包到 JAR 或 AAR 中。

任何人都知道为什么会发生这种情况以及如何更改我的 Gradle 配置来修复它?


编辑:如果我展开 WAR,我会看到外部 Maven 依赖项作为 JAR 与非应用程序模块一起引入 libapp 模块中所有已编译的 Kotlin 类 都在 classes 中。我猜它不工作是因为主应用 JAR 出于某种原因没有引入模块 JAR。

问题比预期的要简单。我的模块结构有这样的模块:

  • :应用程序
  • :common:auth:public
  • :常见:auth:impl
  • :通用:数据:public
  • :通用:数据:实现

publicimpl 子模块作为 public.jarimpl.jar 进入 WAR,它根本不处理重复项。所以一些模块被排除在外。

我不知道如何更改输出的 JAR 名称,所以我最终更改了这样的名称:

  • :应用程序
  • :common:auth:data-public
  • :common:auth:data-impl
  • :通用:数据:数据-public
  • :通用:数据:数据实现