WAR - Gradle 多模块应用 - TypeNotPresentException
WAR - Gradle multi-module app - TypeNotPresentException
我有一个 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 依赖项作为 JAR 与非应用程序模块一起引入 lib
。 app
模块中所有已编译的 Kotlin 类 都在 classes
中。我猜它不工作是因为主应用 JAR 出于某种原因没有引入模块 JAR。
问题比预期的要简单。我的模块结构有这样的模块:
- :应用程序
- :common:auth:public
- :常见:auth:impl
- :通用:数据:public
- :通用:数据:实现
public
和 impl
子模块作为 public.jar
和 impl.jar
进入 WAR,它根本不处理重复项。所以一些模块被排除在外。
我不知道如何更改输出的 JAR 名称,所以我最终更改了这样的名称:
- :应用程序
- :common:auth:data-public
- :common:auth:data-impl
- :通用:数据:数据-public
- :通用:数据:数据实现
我有一个 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 依赖项作为 JAR 与非应用程序模块一起引入 lib
。 app
模块中所有已编译的 Kotlin 类 都在 classes
中。我猜它不工作是因为主应用 JAR 出于某种原因没有引入模块 JAR。
问题比预期的要简单。我的模块结构有这样的模块:
- :应用程序
- :common:auth:public
- :常见:auth:impl
- :通用:数据:public
- :通用:数据:实现
public
和 impl
子模块作为 public.jar
和 impl.jar
进入 WAR,它根本不处理重复项。所以一些模块被排除在外。
我不知道如何更改输出的 JAR 名称,所以我最终更改了这样的名称:
- :应用程序
- :common:auth:data-public
- :common:auth:data-impl
- :通用:数据:数据-public
- :通用:数据:数据实现