【问题标题】:Generating QueryDSL classes with maven fails since 3.1.0自 3.1.0 以来,使用 maven 生成 QueryDSL 类失败
【发布时间】:2014-07-25 15:21:08
【问题描述】:

使用 apt-maven-plugin 生成 QueryDSL 的 Q... 类时,maven 构建失败,SimpleSerializerConfig 中的 NullPointerException - 但仅适用于 3.1.0 之后的 maven 版本。

我们已经尝试调试到 maven 构建,但没有得出任何结论。

maven 配置如下:

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.1</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                <logOnlyOnError>true</logOnlyOnError>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>${querydsl.version}</version>
        </dependency>
        <dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <classifier>apt</classifier>
            <version>${querydsl.version}</version>
        </dependency>
    </dependencies>
</plugin>

${querydsl.version} 为 2.9.0 - 使用更新的版本并不能解决问题。

确切的堆栈跟踪是

java.lang.RuntimeException: java.lang.NullPointerException
    at com.sun.tools.javac.main.Main.compile(Main.java:469)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132)
    at com.mysema.maven.apt.AbstractProcessorMojo.execute(AbstractProcessorMojo.java:314)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
    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:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:318)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:414)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:357)
Caused by: java.lang.NullPointerException
    at com.mysema.query.codegen.SimpleSerializerConfig.getConfig(SimpleSerializerConfig.java:29)
    at com.mysema.query.apt.DefaultConfiguration.<init>(DefaultConfiguration.java:129)
    at com.mysema.query.apt.jpa.JPAConfiguration.<init>(JPAConfiguration.java:69)
    at com.mysema.query.apt.jpa.JPAAnnotationProcessor.createConfiguration(JPAAnnotationProcessor.java:46)
    at com.mysema.query.apt.AbstractQuerydslProcessor.process(AbstractQuerydslProcessor.java:102)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1700(JavacProcessingEnvironment.java:97)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1163)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1108)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824)
    at com.sun.tools.javac.main.Main.compile(Main.java:439)
    ... 23 more

【问题讨论】:

  • 您找到解决方案了吗?

标签: java maven querydsl


【解决方案1】:

此异常通常发生在构建中存在依赖项冲突时。尝试禁用 apt 执行,看看构建中是否还有其他问题。

【讨论】:

  • 您的回答为我们指明了正确的方向:添加依赖项有所帮助 - 我们不使用 spring data jpa,但在将其添加为依赖项后,构建再次起作用。
  • 谢谢 我有一个编译错误。不幸的是插件没有输出这个......或运行后编译时间。
【解决方案2】:

我们也遇到了这个问题。我们注意到原因与注释直接相关。我们向 Maven 本身能够解析的类添加了一个注释,但 mysema 不是。我们将编译依赖显式添加到有问题的 pom 中,一切顺利。

【讨论】:

    【解决方案3】:

    只是分享我遇到类似错误但原因不同的经验,以防其他人遇到此问题。

    在 src/main/java 中的类中添加一个测试范围依赖的注解后出现了同样的错误。 Eclipse 没有抱怨,因为 m2eclipse 不太擅长区分编译和测试范围的依赖项,只是将每个依赖项添加到项目类路径中,而不管范围如何。

    要查看实际的编译错误,我必须执行以下步骤:

    1. 让 m2e-apt 在 Eclipse 中生成 QueryDsl 类
    2. 从项目的 POM 中停用注释处理
    3. 运行mvn compile(不带clean不删除步骤1中生成的类)

    【讨论】:

      猜你喜欢
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2020-10-12
      • 2013-10-31
      • 2019-10-27
      • 2013-08-28
      相关资源
      最近更新 更多