Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

maven-exec-plugin throws exception for no apparent reason

I type the following in a Windows shell in the root of a Maven project that contains a class with a

public static void main(String[] args)

method that I'd like to run.

mvn exec:java -Dexec.mainClass="com.spp.config.main.SqlGeneratorHarness" -e

The class exists and is compiled in that package (i.e., target/classes/com/spp/config/main/SqlGeneratorHarness.class).

I see...

+ Error stacktraces are turned on.  
[INFO] Scanning for projects...  
[INFO] Searching repository for plugin with prefix: 'exec'.  
[INFO] ------------------------------------------------------------------------  
[ERROR] BUILD FAILURE  
[INFO] ------------------------------------------------------------------------  
[INFO] Invalid task '.mainClass=com.spp.config.main.SqlGeneratorHarness': you must specify a valid 
       lifecycle phase, or a goal in the format plugin:goal or pluginGroupId:pluginArtifactId:pluginVersion:goal
[INFO] ------------------------------------------------------------------------
[INFO] Trace org.apache.maven.BuildFailureException: Invalid task' .mainClass=com.spp.config.main.SqlGeneratorHarness': you must specify 
       a valid lifecycle phase, or a goal in the format plugin:goal or pluginGroupId:pluginArtifactId:pluginVersion:goal
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.getMojoDescriptor(DefaultLifecycleExecutor.java:1830)
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.segmentTaskListByAggregationNeeds(DefaultLifecycleExecutor.java:462)
       at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:175)
       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:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       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: Tue Sep 27 14:33:52 PDT 2011
[INFO] Final Memory: 3M/122M
[INFO] ------------------------------------------------------------------------

I've tried variations like

mvn exec:exec -Dexec.executable="java" [...]

and

mvn org.codehaus.mojo:exec-maven-plugin:1.2.1:java [...]

to no avail. What gives?

I'm running Maven 2.2.1, Java JDK 1.6.0_27 on Windows 7 Enterprise 64-bit.

A snippet from my pom.xml for the exec-maven-plugin is...

<plugin> 
   <groupId>org.codehaus.mojo</groupId> 
   <artifactId>exec-maven-plugin</artifactId> 
   <version>${exec-maven-plugin.version}</version> 
</plugin> 

where the version is set in the <properties>

like image 592
Chris Phillipson Avatar asked Sep 27 '11 22:09

Chris Phillipson


People also ask

What does exec maven plugin do?

Maven exec plugin allows us to execute system and Java programs from the maven command. There are two goals of the maven exec plugin: exec:exec - can be used to execute any program in a separate process. exec:java - can be used to run a Java program in the same VM.

Where to put plugin in pom?

Often the <pluginManagement/> element is found in the parent POM. For reporting plugins, specify each version in the <reporting><plugins/></reporting> element (and in the <build><pluginManagement/></build> element too).


1 Answers

So... revisiting this... if you use Windows PowerShell, you will get the exception I originally reported. If, however, you use cmd.exe, then you should be able to run the class with the command as I posted (with or without wrapping double-quotes).

like image 93
Chris Phillipson Avatar answered Sep 19 '22 18:09

Chris Phillipson