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