You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Mark <ja...@gmail.com> on 2006/03/17 09:57:33 UTC

Your First Plugin / First Mojo NullPointerException

I had a go at creating my first plugin, so I followed:

http://maven.apache.org/guides/plugin/guide-java-plugin-development.html

I aslo looked at:

http://maven.apache.org/developers/mojo-api-specification.html

My problem is that the mojo sections isn't being created in
META-INF/maven/plugin.xml from the annotated java file so you get a
java.lang.NullPointerException when you try to invoke the plugin.

Any ideas why this didn't work for me ?
**
*Here is what happened:*

package jms.maven.first.mojo;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;

public class GreetingMojo extends AbstractMojo
{
 /**
  * @goal sayhi
  * @description Says "Hi" to the user
  */
 public void execute() throws MojoExecutionException, MojoFailureException
 {
  getLog().info("Hello, world.");
 }
}

I made sure the <packaging>maven-plugin</packaging> was in the pom, before I
ran mvn install:

[INFO] Scanning for projects...
[INFO]
----------------------------------------------------------------------------
[INFO] Building Sample Parameter-less Maven Plugin
[INFO]    task-segment: [install]
[INFO]
----------------------------------------------------------------------------
[INFO] [plugin:descriptor]
[INFO] Using 2 extractors.
[INFO] Applying extractor for language: java
[INFO] Extractor for language: java found 0 mojo descriptors.
[INFO] Applying extractor for language: bsh
[INFO] Extractor for language: bsh found 0 mojo descriptors.
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] No sources to compile
[INFO] [surefire:test]
[INFO] No tests to run.
[INFO] [jar:jar]
[INFO] Building jar: E:\java\work\workspaces-
3.1.2\default\jms.maven.first.mojo\targe
[INFO] [plugin:addPluginArtifactMetadata]
[INFO] [install:install]
[INFO] Installing E:\java\work\workspaces-
3.1.2\default\jms.maven.first.mojo\target\m
[INFO] [plugin:updateRegistry]
[INFO]
----------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]
----------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Fri Mar 17 08:41:15 GMT 2006
[INFO] Final Memory: 5M/10M
[INFO]
----------------------------------------------------------------------------

*I suppose the important bits are:*

[INFO] Extractor for language: java found 0 mojo descriptors.
[INFO] Applying extractor for language: bsh
[INFO] Extractor for language: bsh found 0 mojo descriptors.

*Sure enough if you try to invoke the plugin you get:*

[INFO] Scanning for projects...
[INFO]
----------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO]
----------------------------------------------------------------------------
[INFO] null
[INFO]
----------------------------------------------------------------------------
[INFO] Trace
java.lang.NullPointerException
        at org.apache.maven.plugin.descriptor.PluginDescriptor.getMojo(
PluginDescriptor.java:261)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.getMojoDescriptor(
DefaultLifecycleExecutor.java:1363)
        at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.segmentTaskListByAggregationNeeds
(DefaultLifecycleExecutor.java:376)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(
DefaultLifecycleExecutor.java:132)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:316)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:113)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(
NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(
DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        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)
[INFO]
----------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Fri Mar 17 08:45:46 GMT 2006
[INFO] Final Memory: 1M/2M
[INFO]
----------------------------------------------------------------------------

Delving into the plugin jar META-INF/maven/plugin.xml file you find:

<plugin>
  <description></description>
  <groupId>javamark</groupId>
  <artifactId>maven-hello-plugin</artifactId>
  <version>1.0-SNAPSHOT</version>
  <goalPrefix>hello</goalPrefix>
  <isolatedRealm>false</isolatedRealm>
  <inheritedByDefault>true</inheritedByDefault>
  <mojos/>
  <dependencies/>
</plugin>

First off I am not sure where <goalPrefix>hello</goalPrefix> comes from I
would have thought this should be <goalPrefix>sayhi</goalPrefix> .

The workaround was to *manually* create the mojo section as:

  <mojos>
    <mojo>
      <goal>sayhi</goal>
      <requiresProject>true</requiresProject>
      <requiresOnline>false</requiresOnline>
      <inheritedByDefault>true</inheritedByDefault>
      <implementation>jms.maven.first.mojo.GreetingMojo</implementation>
      <language>java</language>
      <instantiationStrategy>per-lookup</instantiationStrategy>
      <executionStrategy>once-per-session</executionStrategy>
    </mojo>
  </mojos>

Re: Your First Plugin / First Mojo NullPointerException

Posted by Mark <ja...@gmail.com>.
Ahh - I see where I made the mistake (cut-n-paste) error.

Cheers

Raphaël

On 17/03/06, Piéroni Raphaël <ra...@gmail.com> wrote:
>
> the @goal annotation is to be defined in the class javadoc, not in the
> execute method javadoc...
>
> Just checkout the code of an existing mojo as an example :)
>
> Regards,
>
> Raphaël
>
> 2006/3/17, Mark <ja...@gmail.com>:
> >
> > I had a go at creating my first plugin, so I followed:
> >
> > http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
> >
> > I aslo looked at:
> >
> > http://maven.apache.org/developers/mojo-api-specification.html
> >
> > My problem is that the mojo sections isn't being created in
> > META-INF/maven/plugin.xml from the annotated java file so you get a
> > java.lang.NullPointerException when you try to invoke the plugin.
> >
> > Any ideas why this didn't work for me ?
> > **
> > *Here is what happened:*
> >
> > package jms.maven.first.mojo;
> >
> > import org.apache.maven.plugin.AbstractMojo;
> > import org.apache.maven.plugin.MojoExecutionException;
> > import org.apache.maven.plugin.MojoFailureException ;
> >
> > public class GreetingMojo extends AbstractMojo
> > {
> >  /**
> >   * @goal sayhi
> >   * @description Says "Hi" to the user
> >   */
> >  public void execute() throws MojoExecutionException,
> MojoFailureException
> >  {
> >   getLog().info("Hello, world.");
> >  }
> > }
> >
> > I made sure the <packaging>maven-plugin</packaging> was in the pom,
> before
> > I ran mvn install:
> >
> > [INFO] Scanning for projects...
> > [INFO]
> >
> ----------------------------------------------------------------------------
> > [INFO] Building Sample Parameter-less Maven Plugin
> > [INFO]    task-segment: [install]
> > [INFO]
> >
> ----------------------------------------------------------------------------
> >
> > [INFO] [plugin:descriptor]
> > [INFO] Using 2 extractors.
> > [INFO] Applying extractor for language: java
> > [INFO] Extractor for language: java found 0 mojo descriptors.
> > [INFO] Applying extractor for language: bsh
> > [INFO] Extractor for language: bsh found 0 mojo descriptors.
> > [INFO] [resources:resources]
> > [INFO] Using default encoding to copy filtered resources.
> > [INFO] [compiler:compile]
> > [INFO] Nothing to compile - all classes are up to date
> > [INFO] [resources:testResources]
> > [INFO] Using default encoding to copy filtered resources.
> > [INFO] [compiler:testCompile]
> > [INFO] No sources to compile
> > [INFO] [surefire:test]
> > [INFO] No tests to run.
> > [INFO] [jar:jar]
> > [INFO] Building jar: E:\java\work\workspaces-
> > 3.1.2\default\jms.maven.first.mojo\targe
> > [INFO] [plugin:addPluginArtifactMetadata]
> > [INFO] [install:install]
> > [INFO] Installing E:\java\work\workspaces-
> > 3.1.2\default\jms.maven.first.mojo\target\m
> > [INFO] [plugin:updateRegistry]
> > [INFO]
> >
> ----------------------------------------------------------------------------
> > [INFO] BUILD SUCCESSFUL
> > [INFO]
> >
> ----------------------------------------------------------------------------
>
> >
> > [INFO] Total time: 4 seconds
> > [INFO] Finished at: Fri Mar 17 08:41:15 GMT 2006
> > [INFO] Final Memory: 5M/10M
> > [INFO]
> >
> ----------------------------------------------------------------------------
>
> >
> > *I suppose the important bits are:*
> >
> > [INFO] Extractor for language: java found 0 mojo descriptors.
> > [INFO] Applying extractor for language: bsh
> > [INFO] Extractor for language: bsh found 0 mojo descriptors.
> >
> > *Sure enough if you try to invoke the plugin you get:*
> >
> > [INFO] Scanning for projects...
> > [INFO]
> >
> ----------------------------------------------------------------------------
> > [ERROR] FATAL ERROR
> > [INFO]
> >
> ----------------------------------------------------------------------------
> >
> > [INFO] null
> > [INFO]
> >
> ----------------------------------------------------------------------------
>
> > [INFO] Trace
> > java.lang.NullPointerException
> >         at org.apache.maven.plugin.descriptor.PluginDescriptor.getMojo (
> > PluginDescriptor.java:261)
> >         at
> > org.apache.maven.lifecycle.DefaultLifecycleExecutor.getMojoDescriptor (
> > DefaultLifecycleExecutor.java:1363)
> >         at
> >
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.segmentTaskListByAggregationNeeds
> (
> > DefaultLifecycleExecutor.java:376)
> >         at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(
> > DefaultLifecycleExecutor.java:132)
> >         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java
> :316)
> >         at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:113)
> >         at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >         at sun.reflect.NativeMethodAccessorImpl.invoke (
> > NativeMethodAccessorImpl.java:39)
> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> > DelegatingMethodAccessorImpl.java:25)
> >         at java.lang.reflect.Method.invoke (Method.java :585)
> >         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)
> > [INFO]
> >
> ----------------------------------------------------------------------------
> > [INFO] Total time: < 1 second
> > [INFO] Finished at: Fri Mar 17 08:45:46 GMT 2006
> > [INFO] Final Memory: 1M/2M
> > [INFO]
> >
> ----------------------------------------------------------------------------
> >
> > Delving into the plugin jar META-INF/maven/plugin.xml file you find:
> >
> > <plugin>
> >   <description></description>
> >   <groupId>javamark</groupId>
> >   <artifactId>maven-hello-plugin</artifactId>
> >   <version> 1.0-SNAPSHOT</version>
> >   <goalPrefix>hello</goalPrefix>
> >   <isolatedRealm>false</isolatedRealm>
> >   <inheritedByDefault>true</inheritedByDefault>
> >   <mojos/>
> >   <dependencies/>
> > </plugin>
> >
> > First off I am not sure where <goalPrefix>hello</goalPrefix> comes from
> I
> > would have thought this should be <goalPrefix>sayhi</goalPrefix> .
> >
> > The workaround was to *manually* create the mojo section as:
> >
> >   <mojos>
> >     <mojo>
> >       <goal>sayhi</goal>
> >       <requiresProject>true</requiresProject>
> >       <requiresOnline>false</requiresOnline>
> >       <inheritedByDefault>true</inheritedByDefault>
> >       <implementation>jms.maven.first.mojo.GreetingMojo</implementation>
>
> >       <language>java</language>
> >       <instantiationStrategy>per-lookup</instantiationStrategy>
> >       <executionStrategy>once-per-session</executionStrategy>
> >     </mojo>
> >   </mojos>
> >
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> > For additional commands, e-mail: users-help@maven.apache.org
> >
> >
> >
>

Re: Your First Plugin / First Mojo NullPointerException

Posted by Piéroni Raphaël <ra...@gmail.com>.
the @goal annotation is to be defined in the class javadoc, not in the
execute method javadoc...

Just checkout the code of an existing mojo as an example :)

Regards,

Raphaël

2006/3/17, Mark <ja...@gmail.com>:
>
> I had a go at creating my first plugin, so I followed:
>
> http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
>
> I aslo looked at:
>
> http://maven.apache.org/developers/mojo-api-specification.html
>
> My problem is that the mojo sections isn't being created in
> META-INF/maven/plugin.xml from the annotated java file so you get a
> java.lang.NullPointerException when you try to invoke the plugin.
>
> Any ideas why this didn't work for me ?
> **
> *Here is what happened:*
>
> package jms.maven.first.mojo;
>
> import org.apache.maven.plugin.AbstractMojo;
> import org.apache.maven.plugin.MojoExecutionException;
> import org.apache.maven.plugin.MojoFailureException;
>
> public class GreetingMojo extends AbstractMojo
> {
>  /**
>   * @goal sayhi
>   * @description Says "Hi" to the user
>   */
>  public void execute() throws MojoExecutionException, MojoFailureException
>  {
>   getLog().info("Hello, world.");
>  }
> }
>
> I made sure the <packaging>maven-plugin</packaging> was in the pom, before
> I ran mvn install:
>
> [INFO] Scanning for projects...
> [INFO]
> ----------------------------------------------------------------------------
> [INFO] Building Sample Parameter-less Maven Plugin
> [INFO]    task-segment: [install]
> [INFO]
> ----------------------------------------------------------------------------
>
> [INFO] [plugin:descriptor]
> [INFO] Using 2 extractors.
> [INFO] Applying extractor for language: java
> [INFO] Extractor for language: java found 0 mojo descriptors.
> [INFO] Applying extractor for language: bsh
> [INFO] Extractor for language: bsh found 0 mojo descriptors.
> [INFO] [resources:resources]
> [INFO] Using default encoding to copy filtered resources.
> [INFO] [compiler:compile]
> [INFO] Nothing to compile - all classes are up to date
> [INFO] [resources:testResources]
> [INFO] Using default encoding to copy filtered resources.
> [INFO] [compiler:testCompile]
> [INFO] No sources to compile
> [INFO] [surefire:test]
> [INFO] No tests to run.
> [INFO] [jar:jar]
> [INFO] Building jar: E:\java\work\workspaces-
> 3.1.2\default\jms.maven.first.mojo\targe
> [INFO] [plugin:addPluginArtifactMetadata]
> [INFO] [install:install]
> [INFO] Installing E:\java\work\workspaces-
> 3.1.2\default\jms.maven.first.mojo\target\m
> [INFO] [plugin:updateRegistry]
> [INFO]
> ----------------------------------------------------------------------------
> [INFO] BUILD SUCCESSFUL
> [INFO]
> ----------------------------------------------------------------------------
>
> [INFO] Total time: 4 seconds
> [INFO] Finished at: Fri Mar 17 08:41:15 GMT 2006
> [INFO] Final Memory: 5M/10M
> [INFO]
> ----------------------------------------------------------------------------
>
> *I suppose the important bits are:*
>
> [INFO] Extractor for language: java found 0 mojo descriptors.
> [INFO] Applying extractor for language: bsh
> [INFO] Extractor for language: bsh found 0 mojo descriptors.
>
> *Sure enough if you try to invoke the plugin you get:*
>
> [INFO] Scanning for projects...
> [INFO]
> ----------------------------------------------------------------------------
> [ERROR] FATAL ERROR
> [INFO]
> ----------------------------------------------------------------------------
>
> [INFO] null
> [INFO]
> ----------------------------------------------------------------------------
> [INFO] Trace
> java.lang.NullPointerException
>         at org.apache.maven.plugin.descriptor.PluginDescriptor.getMojo (
> PluginDescriptor.java:261)
>         at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.getMojoDescriptor(
> DefaultLifecycleExecutor.java:1363)
>         at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.segmentTaskListByAggregationNeeds(
> DefaultLifecycleExecutor.java:376)
>         at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(
> DefaultLifecycleExecutor.java:132)
>         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:316)
>         at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:113)
>         at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke (Method.java:585)
>         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)
> [INFO]
> ----------------------------------------------------------------------------
> [INFO] Total time: < 1 second
> [INFO] Finished at: Fri Mar 17 08:45:46 GMT 2006
> [INFO] Final Memory: 1M/2M
> [INFO]
> ----------------------------------------------------------------------------
>
> Delving into the plugin jar META-INF/maven/plugin.xml file you find:
>
> <plugin>
>   <description></description>
>   <groupId>javamark</groupId>
>   <artifactId>maven-hello-plugin</artifactId>
>   <version>1.0-SNAPSHOT</version>
>   <goalPrefix>hello</goalPrefix>
>   <isolatedRealm>false</isolatedRealm>
>   <inheritedByDefault>true</inheritedByDefault>
>   <mojos/>
>   <dependencies/>
> </plugin>
>
> First off I am not sure where <goalPrefix>hello</goalPrefix> comes from I
> would have thought this should be <goalPrefix>sayhi</goalPrefix> .
>
> The workaround was to *manually* create the mojo section as:
>
>   <mojos>
>     <mojo>
>       <goal>sayhi</goal>
>       <requiresProject>true</requiresProject>
>       <requiresOnline>false</requiresOnline>
>       <inheritedByDefault>true</inheritedByDefault>
>       <implementation>jms.maven.first.mojo.GreetingMojo</implementation>
>       <language>java</language>
>       <instantiationStrategy>per-lookup</instantiationStrategy>
>       <executionStrategy>once-per-session</executionStrategy>
>     </mojo>
>   </mojos>
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>
>