1

我不知道如何在基于 maven 的 intellij 项目中设置 picocli Anotation 处理器。

考虑以下主要 pom:

<?xml version="1.0" encoding="UTF-8"?>

<groupId>my.group.id</groupId>
<artifactId>example</artifactId>
<version>1.0</version>
<packaging>pom</packaging>

<modules>
        <module>core</module>
        <module>util</module>
</modules>

<dependencies>
    <dependency>
        <groupId>info.picocli</groupId>
        <artifactId>picocli</artifactId>
        <version>4.5.1</version>
    </dependency>
    <!-- Other dependencies -->
</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
      <annotationProcessorPaths>
        <path>
          <groupId>info.picocli</groupId>
          <artifactId>picocli-codegen</artifactId>
          <version>4.5.1</version>
        </path>
      </annotationProcessorPaths>
      <compilerArgs>
        <arg>-Aproject=${project.groupId}/${project.artifactId}</arg>
      </compilerArgs>
    </configuration>
        </plugin>
</build>

picocli 代码位于核心模块中。但是,只要我在编译器插件中添加配置,我的所有 IntlliJ 配置都会变得无效。我将 pico 配置放在主模块还是核心中都没关系,两者都不起作用。核心模块 pom 仅用于测试和打包。

该代码仍可编译并可用作 jar(无编译时错误检查),但不能在 IntelliJ 中使用。该示例有效。但它不使用模块。

我该怎么做才能在intelliJ中修复它?

4

1 回答 1

1

这似乎是 IntelliJ 无法正确处理非标准 maven 项目的问题。

遵循标准 java 规则的 maven 项目:

$PROJECT
│  pom.xml
│  ReadMe.md
├─core
│  │  pom.xml
│  └─src
│      └─main
│          └─java
│              └─your
│                  └─package
│                      └──Commons_cliTest.java
│                    
└─util
    │  pom.xml
    └─src
        └─main
            └─java
                └─your
                    └─package
                       └─YourClasses.java

这工作得很好。您只需要在子模块 pom.xml 中设置 picocli 配置。

例如,把这个放在核心 pom.xml 中

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
            <annotationProcessorPaths>
                <path>
                    <groupId>info.picocli</groupId>
                    <artifactId>picocli-codegen</artifactId>
                    <version>4.5.1</version>
               </path>
            </annotationProcessorPaths>
            <compilerArgs>
                <arg>-Aproject=${project.groupId}/${project.artifactId}</arg>
            </compilerArgs>
        </configuration>
    </plugin>

所以问题与 IntelliJ 有关。感谢 Remko Popma 帮助解决这个问题

于 2020-10-06T07:46:42.547 回答