Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.NoClassDefFoundError: javax/annotation/ParametersAreNonnullByDefault: javax.annotation.ParametersAreNonnullByDefault #28

Closed
io7m opened this issue Oct 23, 2015 · 5 comments
Labels

Comments

@io7m
Copy link

io7m commented Oct 23, 2015

When using the shaded artifact in a project with no other dependencies, the code generator says:

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project adt4j_test: Fatal error compiling
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
    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:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Fatal error compiling
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:836)
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    ... 20 more
Caused by: org.codehaus.plexus.compiler.CompilerException: java.lang.NoClassDefFoundError: javax/annotation/ParametersAreNonnullByDefault
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:172)
    at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:169)
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:825)
    ... 23 more
Caused by: java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/annotation/ParametersAreNonnullByDefault
    at com.sun.tools.javac.main.Main.compile(Main.java:553)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
    at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:125)
    ... 25 more
Caused by: java.lang.NoClassDefFoundError: javax/annotation/ParametersAreNonnullByDefault
    at com.github.sviperll.adt4j.internal.com.github.sviperll.adt4j.model.ValueClassModelFactory.createValueClass(ValueClassModelFactory.java:149)
    at com.github.sviperll.adt4j.internal.com.github.sviperll.adt4j.model.ValueClassModelFactory.createValueClass(ValueClassModelFactory.java:67)
    at com.github.sviperll.adt4j.GenerateValueClassForVisitorProcessor.processElements(GenerateValueClassForVisitorProcessor.java:101)
    at com.github.sviperll.adt4j.GenerateValueClassForVisitorProcessor.process(GenerateValueClassForVisitorProcessor.java:85)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
    at com.sun.tools.javac.main.Main.compile(Main.java:523)
    ... 28 more
Caused by: java.lang.ClassNotFoundException: javax.annotation.ParametersAreNonnullByDefault
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 40 more

An example project here reproduces it:

https://github.com/io7m/adt4j_test

@sviperll
Copy link
Owner

It's seems that you additionally need com.google.code.findbugs:annotations package

        <dependency>
            <groupId>com.google.code.findbugs</groupId>
            <artifactId>annotations</artifactId>
            <version>2.0.3</version> <!-- Any version should work -->
        </dependency>

We may need to add an option not to use additional annotations... You can add missing dependency as a workaround for now.

@io7m
Copy link
Author

io7m commented Oct 23, 2015

Do the annotations appear in the generated code? If so, it might be preferable to add an option to specify which @Nonnull class to use, as there are many competing standards.

@sviperll
Copy link
Owner

Yes, It's currently not configurable. There should be some kind of

    enum NonnullAnnotaionFlavour {
        NONE,
        FINDBUGS_ANNOTATIONS,
        CHECKERFRAMEWORK,
        // ...
    }

@io7m
Copy link
Author

io7m commented Oct 23, 2015

Would it be possible to simply specify a fully-qualified name of an annotation?

@sviperll
Copy link
Owner

sviperll commented Nov 9, 2015

I've released 3.0-rc1 version. javax.annotation.Nullable, javax.annotation.Nonnull and javax.annotation.ParametersAreNonnullByDefault are used only if these classes are present in classpath during compilation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants