使用模块在 Intellij maven 项目中设置 picocli 注释处理器
Set up picocli Annotation Processor in Intellij maven project with modules
我不知道如何在基于 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。
example 有效。但它不使用模块。
如何在 intelliJ 中修复它?
这似乎是 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 帮助解决这个问题
我不知道如何在基于 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。 example 有效。但它不使用模块。
如何在 intelliJ 中修复它?
这似乎是 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 帮助解决这个问题