【问题标题】:Compilation error for annotations in Java using maven-compiler-plugin 2.5.1 with java 1.8 and netbeans使用带有 java 1.8 和 netbeans 的 maven-compiler-plugin 2.5.1 的 Java 注释编译错误
【发布时间】:2014-10-04 00:58:48
【问题描述】:

我刚开始用 Java 编写注释。我试图按照本教程编写自己的:Playing with Java annotation processing

我写的一切都像它一样,但在编译过程中我收到一个错误:

Bad service configuration file javax.annotation.processing.Processor Provider <my class> not found.

我正在使用带有插件 maven-compiler-plugin v. 2.5.1 的 netbeans 和 maven。和 java 源 v.1.8。

在我的 pom.xml 文件中,我有(如页面中建议的)以下代码:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.5.1</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <!-- Disable annotation processing for ourselves. -->
    <compilerArgument>-proc:none</compilerArgument>
  </configuration>
</plugin>

我的操作系统是 Linux(最小的 ubuntu),而 maven 是集成在 Netbeans 中的操作系统。

我试图用谷歌搜索它,但没有任何帮助。所有教程都是针对旧版本的插件和 Java。我尝试了旧版本的 maven-compiler-plugin 但没有效果。由于 Java 8 中引入了新功能,我无法切换到旧版本的 java。

非常感谢您指点我如何解决它。

编辑:

这是我的来源的完整列表:

Config.java

@Retention(RetentionPolicy.SOURCE)
@Target(value = {ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.PARAMETER})
public @interface Config {
    String name();
    String type();
    String defaultValue();
}

ConfigAnnotationProcessor.java

@SupportedAnnotationTypes(
        {"sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotations"}
)
public class ConfigAnnotationProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
        Messager messager = processingEnv.getMessager();
        annotations.stream().forEach((te) -> {
            env.getElementsAnnotatedWith(te).stream().forEach((e) -> {
                messager.printMessage(Diagnostic.Kind.NOTE,
                        "Printing: " + e.toString());
            });
        });
        return true;
    }

    @Override
    public SourceVersion getSupportedSourceVersion() {
        return SourceVersion.latestSupported();
    }
}

META-INF/services/javax.annotation.processing.Processor

sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotationProcessor

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>sk.lieskove301.jianghongtiao</groupId>
    <artifactId>MotionAnalyser</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        .... some dependencies ...
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <profiles>
        <profile>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.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>
        </profile>
    </profiles>
</project>

这是我的编译器的日志

cd /home/xjuraj/Dropbox/Work/MotionAnalyser; JAVA_HOME=/usr/lib/jvm/java-8-oracle /usr/local/netbeans-8.0/java/maven/bin/mvn clean install
Scanning for projects...

------------------------------------------------------------------------
Building MotionAnalyser 1.0-SNAPSHOT
------------------------------------------------------------------------

--- maven-clean-plugin:2.4.1:clean (default-clean) @ MotionAnalyser ---
Deleting /home/xjuraj/Dropbox/Work/MotionAnalyser/target

--- maven-resources-plugin:2.5:resources (default-resources) @ MotionAnalyser ---
[debug] execute contextualize
Using 'UTF-8' encoding to copy filtered resources.
Copying 6 resources

--- maven-compiler-plugin:2.3.2:compile (default-compile) @ MotionAnalyser ---
Compiling 27 source files to /home/xjuraj/Dropbox/Work/MotionAnalyser/target/classes
-------------------------------------------------------------
COMPILATION ERROR : 
-------------------------------------------------------------
error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotationProcessor not found
1 error
-------------------------------------------------------------
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 1.661s
Finished at: Mon Aug 11 19:56:16 CEST 2014
Final Memory: 12M/180M
------------------------------------------------------------------------
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project MotionAnalyser: Compilation failure
error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotationProcessor not found
-> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

编辑 2 等等...

Screenshot of my environment is here

Screenshot of my folder structure

非集成maven的输出

xjuraj@xjuraj-pc:~/Dropbox/Work/MotionAnalyser$ mvn -e package
+ Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - sk.lieskove301.jianghongtiao:MotionAnalyser:jar:1.0-SNAPSHOT
[INFO]    task-segment: [package]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 6 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 27 source files to /home/xjuraj/Dropbox/Work/MotionAnalyser/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotationProcessor not found
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotationProcessor not found

[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.BuildFailureException: Compilation failure
error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotationProcessor not found

    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:715)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure
error: Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotationProcessor not found

    at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:729)
    at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:128)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
    ... 17 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Aug 14 15:10:26 CEST 2014
[INFO] Final Memory: 19M/187M
[INFO] ------------------------------------------------------------------------

干杯, 朱拉杰

【问题讨论】:

  • 你能显示你的处理器代码吗?
  • 当然,我编辑了我的帖子并包含了我的所有来源...
  • @SupportedAnnotationTypes 值应该是 sk.lieskove301.jianghongtiao.motionanalyser.config.Config,而不是 sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotations
  • 是的,你是对的,我重构后忘记更改它...谢谢。但无论如何,我仍然遇到同样的错误:-/
  • 尝试从 pom.xml 中删除 &lt;profiles&gt; 标签。只有依赖项和属性。

标签: java maven netbeans


【解决方案1】:

非常感谢 bigdestroyer 的宝贵时间和帮助。我已经找到了错误所在。它在 pom.xml 文件中。我的结构是:

<project>
    [...]
    <dependencies>.... some dependencies ...</dependencies>
    <properties>.... some properties ...</properties>
    <profiles>
        <profile>
            <build>
                <plugins>
                    <plugin>
                        ... plugins & settings ...

但标签 存在问题。我删除了它们,它现在就像一个魅力。

所以我的工作 pom.xml 现在看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<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>sk.lieskove301.jianghongtiao</groupId>
    <artifactId>MotionAnalyser</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        ...dependencies...
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.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>

【讨论】:

    【解决方案2】:

    问题似乎出在这条指令上:

    <compilerArgument>-proc:none</compilerArgument>
    

    OP 的回答在 Maven 配置中有这一行,但他没有提到它的重要性。

    我也尝试编写一个注解处理器并用 Maven 编译它。添加该行就可以了。

    【讨论】:

    • project&gt;build&gt;plugins&gt;plugin(maven-compiler-plugin)&gt;configuration&gt;compilerArgument
    猜你喜欢
    • 2021-02-07
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多