使用注释处理器时,IntelliJ 中的 Maven 项目构建失败 (google/auto-value)

标签 maven intellij-idea annotation-processing auto-value

我使用google/auto-value在 Maven 项目中创建不可变的值类。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    [...]
    <packaging>war</packaging>

    <properties>
        <auto-value.version>1.7</auto-value.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>com.google.auto.value</groupId>
                            <artifactId>auto-value</artifactId>
                            <version>${auto-value.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.google.auto.value</groupId>
            <artifactId>auto-value-annotations</artifactId>
            <version>${auto-value.version}</version>
        </dependency>

        [...]

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.5.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

这就像使用 CLI 的魅力(例如 mvn clean test),但在 IntelliJ 项目构建期间会产生错误:

Error:java: java.lang.NoClassDefFoundError: com/google/auto/service/AutoService
com.google.auto.service.AutoService

值得注意:正确的源已生成到 generated-sources/annotations/... 中,但 IntelliJ 构建在此步骤后失败,并且不会创建生成的测试源目录 generated-test -来源/....

虽然可以通过向 maven-compiler-plugin 添加另一个注释处理器路径来轻松解决该问题

<path>
    <groupId>com.google.auto.service</groupId>
    <artifactId>auto-service</artifactId>
    <version>1.0-rc6</version>
</path>

此修复的缺点是,每当 auto-value 依赖项版本发生更改时,都会查找并手动更改 auto-service 版本。我在我的 pom 文件中是否犯了明显的错误,或者 IntelliJ 中的设置我不知道?据我所知,当我将项目导入 IntelliJ 时,会创建正确的注释处理配置文件。

最佳答案

我遇到了同样的问题,我在没有触及代码的情况下修复了它。这是我所做的:

  1. 设置/首选项对话框中Ctrl+Alt+S,转到构建,执行、部署编译器 | 注释处理器
  2. 选择默认值,或者选择您自己的应用程序配置文件或创建新的应用程序配置文件(点击页面底部的“+”)。
  3. 确保选择启用注释处理
  4. 将单选按钮从处理器路径更改为从项目类路径获取处理器

关于使用注释处理器时,IntelliJ 中的 Maven 项目构建失败 (google/auto-value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58671279/

相关文章:

java - java 1.6 注解处理时获取实际类型而不是类型参数

java - NoClassDefFoundError : DataAccessException using spring

java - Maven - 使用所有依赖的 jar 构建 .ear 文件

java - Gradle:将多项目依赖项压缩到应用程序JAR文件中?

maven - Intellij maven 导入损坏了类路径

java - 如何按源代码顺序获取方法

java - 如何找到 ExecutableElement 的类名?

maven - Atmosphere ,jboss 和 primefaces 插入。让他们工作

angularjs - 我需要安装哪些插件才能在 IDEA 中获得 WebStorm 功能?

java - Lombok在Intellij中的注解