gpt4 book ai didi

java - 找不到 Maven 注释处理处理器

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:15 25 4
gpt4 key购买 nike

我是注释处理的新手,我正在尝试使用 Maven 使其自动化。我把它放在我的 pom.xml 中:

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<annotationProcessors>
<annotationProcessor>
co.aurasphere.revolver.annotation.processor.InjectAnnotationProcessor</annotationProcessor>
<annotationProcessor>
co.aurasphere.revolver.annotation.processor.RevolverContextAnnotationProcessor</annotationProcessor>
</annotationProcessors>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>

问题是,当我尝试构建项目时,我得到一个 CompilationFailureException,因为 Maven 找不到处理器。

我发现了其他类似的问题,通过将依赖项放在插件之外来解决。我试过了,但对我来说没有任何改变。

我错过了什么吗?

谢谢。

编辑

这是我对另一个包含处理器和注释的项目的依赖:

    <dependencies>
<dependency>
<groupId>co.aurasphere</groupId>
<artifactId>revolver-annotation-processor</artifactId>
<version>0.0.3-SNAPSHOT</version>
</dependency>
</dependencies>

编辑 2:

经过进一步调查,我决定反编译处理器 JAR(使用 Maven 构建),碰巧......我的类不在那里。由于某些原因,Maven 没有将我的类编译到 JAR 中,这就是找不到这些类的原因。我已经尝试找出该构建的问题所在(我以前从未发生过这种情况,我已经使用 Maven 一段时间了...)。

首先,那个项目上的打包是jar。这些类都在 src/main/java 下。我已经检查了我的 pom.xml,类路径和源路径是相同的。

这是处理器 pom:

<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>co.aurasphere</groupId>
<artifactId>revolver-annotation-processor</artifactId>
<version>0.0.3-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>


</dependencies>

编辑 3

Here是处理器项目上 maven 全新安装的输出。不幸的是输出太长了,我不得不发布一个外部链接,即使我知道它不好。

编辑 4

以下是我的依赖层次结构的一些屏幕截图:EclipseFile System .

由于该项目最初是作为 Eclipse 简单 Java 项目创建的,然后转换为 Maven 项目,我尝试创建一个新的 Maven 项目并将所有内容移动到新项目,希望问题出在 Eclipse 插件上有问题,但错误仍然存​​在。

最佳答案

这是@Aurasphere 提供的上述已接受答案的扩展版本。希望这将对所提出的解决方案的工作原理给出一些解释。

首先,介绍一下这里发生的事情的一些背景。比如说,我们想要一个自定义注释处理器。我们实现它并将其作为 Maven Artifact 放入 JAR 中,以便它可以被其他项目使用。在编译此类项目时,我们希望我们的注解处理器能够被 Java 编译器识别并适当使用。要做到这一点,需要告诉编译器一个新的自定义处理器。编译器查看资源并检查 META-INF/services/javax.annotation.processing.Processor 文件中列出的类的 FQN。它尝试在类路径中找到这些类并加载它们以运行对当前正在编译的类上使用的注释的处理。

因此,我们希望在此文件中提及我们的自定义类。我们可以要求我们图书馆的用户手动放置这个文件,但这并不直观,用户可能会因为 promise 的注释处理不起作用而感到沮丧。这就是为什么我们可能想要提前准备好这个文件,并将它与我们 Maven Artifact 的 JAR 中的处理器一起交付。

问题是,如果我们简单地把这个带有自定义处理器的 FQN 的文件放入其中,它会在编译我们的 Artifact 期间触发编译器,并且由于处理器本身还没有编译,编译器将显示有关它的错误。所以我们需要跳过注解处理来避免这种情况。这可以使用 -proc:none 或 Maven 来完成:

<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<proc>none</proc>
</configuration>
</plugin>

我们可能有需要注释处理器的单元测试。在 Maven 中,测试编译是在构建主要源代码之后进行的,并且所有类都已经可用,包括我们的处理器。我们只需要在处理将使用我们的注释处理器的测试源期间添加特殊步骤。这可以通过以下方式完成:

<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>process-test-annotations</id>
<phase>generate-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<proc>only</proc>
<annotationProcessors>
<annotationProcessor>fully.qualified.Name</annotationProcessor>
</annotationProcessors>
</configuration>
</execution>
</executions>
</plugin>

关于java - 找不到 Maven 注释处理处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38926255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com