如何使IntelliJ IDEA识别构建时生成的源?

时间:2017-04-27 08:08:06

标签: maven intellij-idea compilation auto-generate auto-value

我做了small zip example来说明问题。

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

正常运行mvn clean install并生成并编译所有内容到target/classes

enter image description here

问题是IntelliJ无法识别AutoValue_Animal

enter image description here

那么如何让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>

2 个答案:

答案 0 :(得分:0)

找到一个对我有用的解决方案,但不喜欢它。我取消标记了target中的Excluded文件夹,并将classes标记为Sources

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

enter image description here

这是一个错误的解决方案,因为:

  1. 如果您希望将代码保持在dev-env之外,那么您就不会提交IDEA和配置文件。因此需要在每个克隆上重复此步骤。
  2. 如果其他文件夹开始进入target文件夹,则需要手动排除它们。
  3. 解决方案不是以maven为中心,导致dev-env配置被拆分为多个文件。

答案 1 :(得分: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.javatarget/generated-sources/annotations中生成,IntelliJ IDEA在没有任何额外调整的情况下读取。

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