【问题标题】:Set up picocli Annotation Processor in Intellij maven project with modules在 Intellij maven 项目中使用模块设置 picocli 注释处理器
【发布时间】:2020-10-05 08:30:42
【问题描述】:

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

考虑以下主要的 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 中使用。 example 有效。但它不使用模块。

如何在 intelliJ 中修复它?

【问题讨论】:

  • 我很乐意帮助解决这个问题。您的项目在公共回购中吗?或者更好的是,如果您可以提供重现问题的最小示例项目,我们可以在修复后将其添加到 picocli 示例中。请随时在picocli issue tracker 中提出票以进一步讨论。
  • @RemkoPopma 感谢您的帮助。我创建了一个最小的example project。如果我们能解决这个问题就太好了。问题是here

标签: java maven intellij-idea picocli


【解决方案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 中设置 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-14
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2017-05-21
    • 2010-12-01
    • 2022-10-18
    相关资源
    最近更新 更多