【问题标题】:IllegalStateException in Hibernate metamodel generation with maven使用 maven 生成 Hibernate 元模型中的 IllegalStateException
【发布时间】:2015-08-08 08:30:57
【问题描述】:

我正在使用 hibernate-jpamodelgen 使用 maven 生成元模型类。

当我运行 mvn clean package 时,它运行良好,没有任何问题。但是如果我第二次运行 mvn 包 (没有清理),我会得到以下异常:

An exception has occurred in the compiler (1.8.0_51). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport)  after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report.  Thank you.
java.lang.IllegalStateException: endPosTable already set
    at com.sun.tools.javac.util.DiagnosticSource.setEndPosTable(DiagnosticSource.java:136)
    at com.sun.tools.javac.util.Log.setEndPosTable(Log.java:350)
    at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:667)
    at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:950)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.<init>(JavacProcessingEnvironment.java:892)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.next(JavacProcessingEnvironment.java:921)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1187)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
    at com.sun.tools.javac.main.Main.compile(Main.java:523)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:125)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:825)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:160)
    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:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

环境

JDK version : 1.8.0_51
Maven version : 3.3
Hibernate version : 4.3.7.Final

来自我的 pom.xml 的片段:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>4.3.7.Final</version>
            <scope>provided</scope>
        </dependency>

【问题讨论】:

    标签: java hibernate maven jpa metamodel


    【解决方案1】:

    找到答案了!...

    这是 ma​​ven-compiler-plugin3.23.3 版本中的错误。

    当我第二次运行 'mvn package' 时,之前生成的源目录会在 generate-source 阶段之前添加到源路径中,这会导致 解析器异常。

    切换回旧版本 () 的 maven-compiler-plugin 修复问题。

    请注意,增量编译3.03.1 版本的 ma​​ven-compiler 中损坏 -插件。所以,我更喜欢切换2.5.1版本的maven-compiler-plugin。

    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
    </dependency>
    

    【讨论】:

    • 您是否为此提交了错误报告?
    • 很多人在github上报告了这个问题。其中之一是:issues.apache.org/jira/browse/MCOMPILER-205
    • 由于@eyes 现在提供了一个可以使用的前瞻性版本,请尝试在您的应用中对其进行测试,如果它适用于您,请更改您接受的答案。
    【解决方案2】:

    gradle build 也面临同样的问题。 如果您之前在@source-generate 有可用的元模型类(请检查 build.gradle 文件以检查生成模型类的路径),运行 gradle build 时会出现此问题。

    解决方案:删除现有模型类并运行 gradle build。它应该锻炼。

    【讨论】:

    • Gradle 现在也修复了这个问题 - 请参阅此链接:github.com/gradle/gradle/pull/4700#issuecomment-378721681 - 我已经在 4.10.2 版本中进行了尝试。你必须使用 f.e. dependencies { annotationProcessor 'org.hibernate:hibernate-jpamodelgen:5.3.4.Final' } 然后compileJava { options.annotationProcessorGeneratedSourcesDirectory = project.file(myDirectory) }
    【解决方案3】:

    此错误已在此期间修复。您应该使用 maven 编译器插件 3.6 或更高版本:

    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
    </dependency>
    

    【讨论】:

    • 太棒了。这解决了我使用休眠、生成源、运行注释处理器和 Cobertura 的问题。大组合,所以我提到它是为了让其他人可以搜索该组合。
    【解决方案4】:

    我刚刚找到了导致此错误的另一个原因:maven-processor-plugin 的旧版本(在我的情况下为 2.1.0)。即使在运行 mvn clean 包时,我也得到了“已设置的 endPosTable”。将 maven-processor-plugin 和 hibernate-jpamodelgen 升级到最新版本会有所帮助。

    【讨论】:

      【解决方案5】:

      我设法通过删除 maven-processor-plugin 解决了这个错误(发生在 CI/CD 中,但在本地不是问题)。我的 intelliJ 仍然获取对 modelgen 类的引用,并且只需要导入依赖项

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-27
        • 2019-09-22
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多