2

我做了一个小的 zip 示例来说明这个问题。

我在项目中有来自AutoValue 示例的 Animal 类和一个 maven pom 文件来进行代码生成和编译。见下文。

运行mvn clean install效果很好,并将所有内容生成并编译为target/classes

在此处输入图像描述

问题是 IntelliJ 无法识别AutoValue_Animal

在此处输入图像描述

那么如何让 IntelliJ IDEA 识别构建时生成的源呢?

* 最好不需要更改 IDEA 的特定设置,以保持开发环境围绕 Maven 整合。

班级:

package kilaka;

import com.google.auto.value.AutoValue;

@AutoValue
public abstract class Animal {
    static Animal create(String name, int numberOfLegs) {
        // See "How do I...?" below for nested classes.
        return new AutoValue_Animal(name, numberOfLegs);
    }

    abstract String name();

    abstract int numberOfLegs();
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kilaka</groupId>
    <artifactId>auto-test</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.google.auto.value</groupId>
            <artifactId>auto-value</artifactId>
            <version>1.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>
4

2 回答 2

0

找到了一个对我有用但不喜欢的解决方案。我取消了target文件夹的Excluded标记并将其标记classesSources.

为了继续排除所有其他目标文件夹,我必须将所有其他文件夹标记为已排除。

在此处输入图像描述

这是一个糟糕的解决方案,因为:

  1. 如果你想让你的代码从 dev-env 中保持干净,你就没有提交 IDEA'a 配置文件。因此需要在每个克隆上重复此步骤。
  2. 如果其他文件夹开始进入target文件夹,您需要手动排除它们。
  3. 该解决方案不是以 Maven 为中心的,导致 dev-env 配置被拆分为多个文件。
于 2017-04-27T08:08:06.213 回答
0

似乎以下解决了该问题:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5</version>
    <configuration>
        <source>6</source>
        <target>6</target>
    </configuration>
</plugin>

这导致在AutoValue_Animal.java中生成文件target/generated-sources/annotations,IntelliJ IDEA 无需任何额外调整即可读取该文件。

我读到 Java 5 不支持注释处理(但生成了类)。在此处查看更多信息。

于 2017-04-27T12:10:09.590 回答