Java habarta typescript插件无法加载类

Java habarta typescript插件无法加载类,java,gradle,plugins,Java,Gradle,Plugins,我遇到问题,尝试了2.7的所有版本。至迟。这是gradle构建脚本 generateTypeScript { jsonLibrary = 'jackson2' classPatterns = [ 'com.foo.**' ] excludeClasses = [ 'org.springframework.data.mongodb.repository.ReactiveMongoRepository' ] exclud

我遇到问题,尝试了2.7的所有版本。至迟。这是gradle构建脚本

generateTypeScript {
    jsonLibrary = 'jackson2'
    classPatterns = [
        'com.foo.**'
    ]
    excludeClasses = [
        'org.springframework.data.mongodb.repository.ReactiveMongoRepository'
    ]
    excludeClassPatterns = [
        'java.io.Serializable',
        'com.foo.**Repository',
        'com.foo.**Builder',
        'org.springframework.data.mongodb.repository.**',
        'java.lang.Compareable',
        'org.bson.types.ObjectId'
    ]
    outputFile = 'build/customers.d.ts'
    outputKind = 'global'
    namespace = 'Customers'
    optionalProperties = 'all'
    customTypeMappings = [
        'java.time.LocalDateTime:string',
        'org.bson.types.ObjectId:string'
    ]
}
错误是

无法加载类“org.springframework.data.mongodb.repository.ReactiveMongoRepository”

找不到的类位于类路径上,编译项目工作正常。在excludeClasses或excludeClassPatterns中省略该类并没有什么区别

应该从classPatterns+ExcludedClassSpatterns转换规则的类中没有一个实现ReactiveMongoRepository

我做错了什么?如何解决

堆栈跟踪

* What went wrong:
Execution failed for task ':generateTypeScript'.
> org/springframework/data/mongodb/repository/ReactiveMongoRepository

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':generateTypeScript'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:246)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:136)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.execute(DefaultTaskPlanExecutor.java:201)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.executeWithTask(DefaultTaskPlanExecutor.java:192)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NoClassDefFoundError: org/springframework/data/mongodb/repository/ReactiveMongoRepository
        at cz.habarta.typescript.generator.Input.loadClasses(Input.java:150)
        at cz.habarta.typescript.generator.Input.fromClassNames(Input.java:136)
        at cz.habarta.typescript.generator.Input.fromClassNamePatterns(Input.java:131)
        at cz.habarta.typescript.generator.Input.fromClassNamesAndJaxrsApplication(Input.java:55)
        at cz.habarta.typescript.generator.gradle.GenerateTask.generate(GenerateTask.java:184)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:794)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:761)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        ... 30 more
Caused by: java.lang.ClassNotFoundException: org.springframework.data.mongodb.repository.ReactiveMongoRepository
        ... 52 more
build.grade:

buildscript {
    ext {
        springBootVersion = '2.0.6.RELEASE'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath 'cz.habarta.typescript-generator:typescript-generator-gradle-plugin:2.8.449'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'cz.habarta.typescript-generator'

group = 'com.foo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 10

repositories {
    mavenCentral()
    jcenter()

}


generateTypeScript {
    jsonLibrary = 'jackson2'
    classPatterns = [
            'com.foo.**'
    ]
    excludeClasses = [
            'org.springframework.data.mongodb.repository.ReactiveMongoRepository'
    ]
    excludeClassPatterns = [
            'java.io.Serializable',
            'com.foo.**Repository',
            'com.foo.**Builder',
            'org.springframework.data.mongodb.repository.**',
            'java.lang.Compareable',
            'org.bson.types.ObjectId'
    ]
    outputFile = 'build/customers.d.ts'
    outputKind = 'global'
    namespace = 'Customers'
    optionalProperties = 'all'
    customTypeMappings = [
            'java.time.LocalDateTime:string',
            'org.bson.types.ObjectId:string'
    ]
}

task copyTypescriptTypes(type: Copy) {
    from file('build/customers.d.ts')
    into file('/frontend/src')
}

task buildAndCopy() {
    dependsOn generateTypeScript
    dependsOn copyTypescriptTypes
    tasks.findByName('copyTypescriptTypes').mustRunAfter 'generateTypeScript'
}

dependencies {
    implementation 'org.passay:passay:1.4.0'
    implementation 'com.neovisionaries:nv-i18n:1.23'

    implementation('org.springframework.boot:spring-boot-starter-actuator')
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-data-mongodb-reactive')
    implementation('org.springframework.boot:spring-boot-starter-data-redis-reactive')
    implementation('org.springframework.boot:spring-boot-starter-jdbc')
    implementation('org.springframework.boot:spring-boot-starter-security')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework.session:spring-session-data-redis')
    implementation('org.springframework.session:spring-session-jdbc')
    runtimeOnly('mysql:mysql-connector-java')
    compileOnly('org.projectlombok:lombok')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
    testImplementation('io.projectreactor:reactor-test')
    testImplementation('org.springframework.security:spring-security-test')

    compile "javax.xml.bind:jaxb-api:2.2.11"
    compile "com.sun.xml.bind:jaxb-core:2.2.11"
    compile "com.sun.xml.bind:jaxb-impl:2.2.11"
    compile "javax.activation:activation:1.1.1"
}
失败的课程:

public class UserData {
  @Id
  private ObjectId id;
  @CreatedDate
  @JsonDeserialize(using = LocalDateTimeDeserializer.class)
  @JsonSerialize(using = LocalDateTimeSerializer.class)
  private LocalDateTime createdAt;
  @LastModifiedDate
  @JsonDeserialize(using = LocalDateTimeDeserializer.class)
  @JsonSerialize(using = LocalDateTimeSerializer.class)
  private LocalDateTime updatedAt;

  private String email;
}
错误:

Unable to load class 'org.bson.types.ObjectId'.

因此,答案似乎是您依赖于ReactiveMongoRepository接口

在不依赖于ReactiveMongoRepository的情况下,尝试项目设置,运行generateTypeScript可以提供一个干净的构建

但是,根据该接口,错误与您在下面发布的内容相匹配。 扩展ReactiveMongoRepository然后将其标记为excluded是不起作用的,如果是这样的话,这有点不合理

java.lang.NoClassDefFoundError: org/springframework/data/mongodb/repository/ReactiveMongoRepository
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    ...
显然,不能排除org.bson.types.ObjectId,因为您正在UserData中使用它

要解决Jackson和Bson错误,只需将它们作为依赖项。 到目前为止,它们只能通过可传递依赖项(可能是重新打包的版本)使用

compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.8'
compile group: 'org.mongodb', name: 'bson', version: '3.10.1'

您可以发布整个Gradle构建文件和整个异常stacktrace吗?@LppEdd-sure,在excludeClassPatterns属性下发布org.springframework.*。删除excludeClasses块。尝试了它,但同样的错误很不幸@LppEddI将复制您的项目。它似乎忽略了排除类模式中的所有内容。我发布了一个mongo文档,它只保存ObjectId,现在只有ObjectId出现了同样的错误。请您试一试好吗?我已经三次检查了ReactiveMongoRepository上的每个依赖项是否都在excludedClassPatterns中注意ObjectId也在excludedClassPatterns中它有一个自定义类型mappingPPS…:-删除ObjectId会导致有关localDateTime的错误。很奇怪,我在医生里看到了,是的。我目前正在检查一些更深入的,将很高兴得到恢复工作,因为它是相当有帮助的,并在其他项目的所有准备工作