domaframework / doma

DAO oriented database mapping framework for Java
https://doma.readthedocs.io/
Apache License 2.0
447 stars 70 forks source link

Entityでbuildエラー #362

Closed chichi1091 closed 4 years ago

chichi1091 commented 4 years ago

概要

EntityクラスをBuildするとコンパイルエラーが発生してしまう

環境

Entity

@Entity(immutable = true, naming = NamingType.SNAKE_LOWER_CASE)
@Table(name = "member")
data class Member (

    @Id
    @Column(name = "member_id")
    val MemberId: String,

    @Column(name = "account_name")
    val accountName: String,

    @Column(name = "create_date")
    val createDate: Date
)

StackTrace

entity/Member.java:10: エラー: [DOMA4016] An unexpected error has occurred. It may be a bug in the Doma framework. Report the following stacktrace: java.lang.AssertionError: The value is null. key = [listener].
public final class Member {
             ^
    at org.seasar.doma.internal.util.AssertionUtil.assertNonNullValue(AssertionUtil.java:91)
    at org.seasar.doma.internal.apt.annot.EntityAnnot.<init>(EntityAnnot.java:30)
    at org.seasar.doma.internal.apt.annot.Annotations.newInstance(Annotations.java:256)
    at org.seasar.doma.internal.apt.annot.Annotations.newInstance(Annotations.java:236)
    at org.seasar.doma.internal.apt.annot.Annotations.newEntityAnnot(Annotations.java:131)
    at org.seasar.doma.internal.apt.meta.entity.EntityMetaFactory.createTypeElementMeta(EntityMetaFactory.java:62)
    at org.seasar.doma.internal.apt.meta.entity.EntityMetaFactory.createTypeElementMeta(EntityMetaFactory.java:50)
    at org.seasar.doma.internal.apt.processor.AbstractGeneratingProcessor.lambda$process$0(AbstractGeneratingProcessor.java:40)
    at org.seasar.doma.internal.apt.processor.AbstractProcessor.handleTypeElement(AbstractProcessor.java:49)
    at org.seasar.doma.internal.apt.processor.AbstractGeneratingProcessor.process(AbstractGeneratingProcessor.java:37)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt)
    at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:132)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:80)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:36)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:223)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:187)
    at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:98)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:95)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:105)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:80)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:398)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:65)
    at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:389)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:118)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:166)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:56)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:84)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:42)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:442)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:102)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:1005)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:102)
    at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:138)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:1047)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:1004)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:441)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
nakamura-to commented 4 years ago

私の環境では再現できませんでした。 少し問題の切り分けをさせてください。

まず、以下のリポジトリを問題が発生している環境にcloneしてください。 https://github.com/domaframework/kotlin-sample

次に、ディレクトリを移動してください。

$ cd kotlin-sample

その後に、以下のコマンドを実行してみた場合に問題なくビルドが成功するでしょうか?

$ ./gradlew clean build

ビルドが成功したらサンプルで提示してもらった Member クラスをクローンした kotlin-sample プロジェクトの src/main/kotlin/sample ディレクトリに定義してみて再度以下のコマンドを実行してみてください。ビルドは成功するでしょうか?

$ ./gradlew clean build
chichi1091 commented 4 years ago

問題が発生している環境でサンプルをビルド

問題が発生している環境でビルドを行った結果、以下が発生しました

sample/Gender.java:26: エラー: 不適合な型: NonExistentClassをAnnotationに変換できません:
        @error.NonExistentClass()
              ^

サンプルプロジェクトでビルド

問題なくビルドが通りました

環境に問題がありそうですのでサンプルプロジェクトのbuild.gradleと比較してみようと思います

chichi1091 commented 4 years ago

無事解決することができました
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" が抜けていたためでした
大変申し訳ありません、お手数お掛けしました

nakamura-to commented 4 years ago

解決したようでよかったです。

ただ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" がない場合に意味不明なエラーになってしまうのは困り物ですね。