我有一个应用程序,其 Gradle 模块结构类似于:
app - applies war
common/utilities
common/auth
等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 依赖项被带入
lib
作为 JAR 以及非应用程序模块。 app
中所有已编译的 Kotlin 类模块位于 classes
.我猜它不起作用,因为由于某种原因,主应用程序 JAR 没有引入模块 JAR。
最佳答案
问题比预期的要简单。我的模块结构有这样的模块:
public
和 impl
子模块作为 public.jar
和 impl.jar
进入 WAR,它根本不处理重复项。所以有些模块被遗漏了。我不知道如何更改输出的 JAR 名称,所以我最终更改了这样的名称:
关于java - WAR - Gradle 多模块应用程序 - TypeNotPresentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60924266/