当前位置: 首页 > 知识库问答 >
问题:

错误的服务配置文件,或在构造处理器对象时引发异常

洪英豪
2023-03-14

我正在Java写一个简单的自定义注释,遇到了一个问题。下面是我的代码的主要部分。

日志自定义注释。JAVA

package fun.n.learn.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

// We need this annotation only till before compilation.
@Retention(RetentionPolicy.SOURCE)
// This is a simple custom annotation.
public @interface LogMeCustomAnnotation {

}

LogMeCustomAnnotationProcessor。JAVA

package fun.n.learn.annotation;

import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.Messager;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;

// List the custom annotations that are supported.
@SupportedAnnotationTypes({ "fun.n.learn.annotation.LogMeCustomAnnotation" })
// Extend AbstractProcessor. This will let you process.
public class LogMeCustomAnnotationProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations,
            RoundEnvironment roundEnv) {

        Messager messager = processingEnv.getMessager();
        messager.printMessage(Diagnostic.Kind.NOTE, "I was here.");

        // TODO: Put some meaningful code here. Right now just get it to work.

        // return false;
        // We have already handled these annotations. No more. So return true.
        return true;
    }

}

/src/main/resources/META-INF/services/javax.annotation.processing.处理器

fun.n.learn.annotation.LogMeCustomAnnotationProcessor

波姆。xml

<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>fun.n.learn</groupId>
    <artifactId>javaCustomAnnotation</artifactId>
    <version>0.1.0</version>

    <build>
        <plugins>
            <plugin>
                <!-- Configure the project to use java 8 version. -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!-- Disable annotation processing for ourselves. -->
                    <!-- <compilerArgument>-proc:none</compilerArgument> -->
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>

现在,当我运行mvn-e清洁安装时,我得到以下问题

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider fun.n.learn.annotation.LogMeCustomAnnotationProcessor not found
[INFO] 1 error

我一定错过了一个简单的技巧。有什么帮助吗?

共有3个答案

景俊良
2023-03-14

请按照以下步骤解决此问题:

  • 编辑nbproject/project.properties文件
  • 搜索javac.processorpath,并将其更改为:

javac.processorpath =\ ${ javac.classpath }:\ ${ libs.eclipselink.classpath}

罗伟兆
2023-03-14

好的。找到问题了。早些时候,我的pom.xml已经注释掉了proc:无行。现在我已经把它恢复运行了,它编译得很好。我需要弄清楚这行到底做了什么,但是我问题的答案是把proc:无放回游戏中。这就是我pom.xml的构建部分现在的样子。

<build>
    <plugins>
        <plugin>
            <!-- Configure the project to use java 8 version. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <!-- Disable annotation processing for ourselves. -->
                <compilerArgument>-proc:none</compilerArgument>
            </configuration>
        </plugin>
    </plugins>
</build>
徐柏
2023-03-14

默认的maven生命周期使用javax运行javac。注释。处理。处理器文件作为类路径的一部分。这会导致编译器期望文件中列出的注释处理器的编译实例。但此时未编译LogMeCustomAnnotationProcessor,所以编译器会引发“错误的服务配置文件…”错误见错误报告为了解决这个问题,maven的编译阶段可以分开,首先编译注释处理器,然后编译整个项目。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
            <executions>
                <execution>
                    <id>default-compile</id>
                    <configuration>
                        <compilerArgument>-proc:none</compilerArgument>
                        <includes>
                            <include>fun/n/learn/annotation/LogMeCustomAnnotationProcessor.java</include>
                            <!--include dependencies required for LogMeCustomAnnotationProcessor -->
                        </includes>
                    </configuration>
                </execution>
                <execution>
                    <id>compile-project</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

default compile执行编译LogMeCustomAnnotationProcessor时禁用注释处理,以便成功编译
编译项目通过注释处理编译整个项目。

 类似资料:
  • 以下是通过javaCompiler taska进行诊断时出现的错误: 我试图动态编译一个简单的java类从文件,使用JavaCompiler。这个类看起来像: 我的项目是Maven项目类型 正如你所看到的,康纳廷的班级没什么特别的。我需要的一件事是从这个类中获取一个类对象。但在运行时。我想编译这个动态类并获取类对象。问题是我正在开发Netbeans平台,我想在这个IDE中实现这一点(我开发了一个简

  • 我在AIX服务器上编译java源代码时出错,编码设置为IBM-1047。下面是错误, [INFO]2018-04-17 09:21:13,272[main]-编译输出消息错误:构造处理器对象时引发的异常:无效索引 [致命]2018-04-17 09:21:13273[main]-错误:构造处理器对象时引发异常:索引无效 如果我删除编码变量,并使用默认编码作为ISO-8859-1编译,我得到下面的错

  • 此代码的输出是 这意味着异常将由<代码>接收器重新引发。下一步(i) 在推送方法和非推送错误反应通道中。为什么?

  • 我正在将本地netty服务器连接到远程https服务器以代理请求。 下面是我如何创建ssLcontext bean 当我点击我的本地主机时,它应该代理到后端。我得到以下异常。但是,如果SSL关闭并且我连接到远程,这是在不同端口上运行的本地服务器,则工作正常 编辑 添加的日志

  • 我正在处理一个Spring启动应用程序。我尝试处理异常。但我想我这样做的方式有问题,因为它总是抛出内部服务器错误500。 我尝试设置自定义异常类,并且还使用带有@响应状态的响应状态代码。但是不管异常是什么,它只会抛出内部服务器错误。我使用的是intellij,我在异常中给出的消息打印在那里,但响应正文empty.This我想一定是因为它抛出了内部服务器错误。 控制器类 intellij 中的终端打

  • 问题内容: 我在页面上有几个更新面板和jquery选项卡。另外,我正在更新面板上加载几个用户控件。用户等待几分钟后(未检查的时间约为40分钟)。当用户从“提交”按钮发送请求时,出现以下错误? 我无法解决此问题。但我相信。这是由Ajax引起的。大师,如果您知道解决方案。请告诉我。 问题答案: 当您有一个控件注册为多个更新面板中时,有时会出现此问题。 如果这不是问题,请尝试在脚本管理器声明之后立即添加