6

I'm newborn in writing anotations in Java. I was trying to write my own following this tutorial: Playing with Java annotation processing

I wrote everything like it is there, but during compilation I'm getting an error:

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

I'm using netbeans and maven with plugin maven-compiler-plugin v. 2.5.1. and java sources v.1.8.

In my pom.xml file I have (like suggested in page) following code:

<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>

My OS is Linux (leatest ubuntu) and maven is that one integrated in Netbeans.

I was trying to google it, but nothing helped me. All tutorials were for older release of plugin and Java. I tried older release of maven-compiler-plugin but with no effect. I cannot switch to older version of java because of new features introduced in Java 8.

Thanks a lot for any pointing me how to fix it.

Edit:

Here is full list of my sources:

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>

And this is log of my compiler:

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

Edit 2 and so on...:

Screenshot of my environment is here

Screenshot of my folder structure

Output of non-integrated 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] ------------------------------------------------------------------------

Cheers, juraj

JiangHongTiao
  • 858
  • 2
  • 8
  • 29
  • can you show your processor code? – Héctor Aug 11 '14 at 08:49
  • sure, I edited my post and I included all my sources... – JiangHongTiao Aug 11 '14 at 17:59
  • `@SupportedAnnotationTypes` value should be `sk.lieskove301.jianghongtiao.motionanalyser.config.Config`, not `sk.lieskove301.jianghongtiao.motionanalyser.config.ConfigAnnotations`. – Héctor Aug 12 '14 at 06:58
  • Yes, you are right, i forgot to change it after refactoring... Thanks. But anyway, I'm still getting the same error :-/ – JiangHongTiao Aug 12 '14 at 09:33
  • Try to remove the `` tag from pom.xml. Only dependencies and properties. – Héctor Aug 12 '14 at 09:34
  • nothing has changed. Still the same error. – JiangHongTiao Aug 12 '14 at 13:51
  • how are you compiling the project? can you show your project package tree? – Héctor Aug 13 '14 at 06:56
  • I'm compiling it through Netbeans environment automatically. Screenshot of my environment is here: http://s30.postimg.org/xi1wm49jz/Screenshot_from_2014_08_13_18_08_26.png I already checked names of packages, I think they are correct. – JiangHongTiao Aug 13 '14 at 16:21
  • I have not used Netbeans, but are you sure that you have a tipical maven project structure? Don't `sk.lieskove301.jian...` should be inside `src/main/java` ? – Héctor Aug 14 '14 at 07:09
  • Actually, it has structure like this. Netbeans just shows it differently. Here is screenshot of my folder structure: http://s12.postimg.org/hjdj38rks/screenshot.jpg – JiangHongTiao Aug 14 '14 at 09:32
  • Sorry. It seems ok. Have you tried to compile manually in console? `mvn package` – Héctor Aug 14 '14 at 10:52
  • Don't be sorry, it's OK :) I've tried to compile it by maven from Ubuntu repositories, but the same error. I turned on debug info, but I don't think there is something important. Output is at the end of my edited post. – JiangHongTiao Aug 14 '14 at 13:17

2 Answers2

10

Thanks a lot bigdestroyer for your time and help. I already found where the bug was. It was in pom.xml file. My structure was:

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

But there were problem with tags <profiles> and <profile>. I removed them and it works like a charm now.

So my working pom.xml now looks like:

<?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>
JiangHongTiao
  • 858
  • 2
  • 8
  • 29
1

The problem seems to be in this instruction:

<compilerArgument>-proc:none</compilerArgument>

OP's answer has that line in Maven configuration, but he doesn't mention its importance.

I, too, tried to write an annotation processor and compile it with Maven. Addinng the line did the trick.

gvlasov
  • 18,638
  • 21
  • 74
  • 110