You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Mykel Alvis <my...@weirdness.com> on 2006/07/05 19:20:56 UTC

Java Mojo parameter question

If I have the following parameters in my mojo (among others)
-----
    /**
     * Base directory of work for the wscompile process.
     * @parameter
default-value="${project.build.directory}/generated-sources/jaxrpc-wscompile"

     * @required
     */
    private String base;
    /**
     * Both?
     * @parameter default-value="false"
     */
    private boolean both;
----

shouldn't it generate something more  interesting than this in the "<base"
configuration, or does that happen as part of the FM of maven mojos?

------
        <parameter>
          <name>sourceRoots</name>
          <type>java.util.List</type>
          <required>true</required>
          <editable>false</editable>
          <description>List of source roots containing non-test
code.</description>
        </parameter>
      </parameters>
      <configuration>
        <base implementation="java.io.File" default-value="""/>
        <dependencies implementation="java.util.Set" default-value="""/>
        <outputDirectory implementation="java.io.File">${
project.build.directory}</outputDirectory>
        <sourceRoots implementation="java.util.List" default-value="""/>
        <resources implementation="java.util.List" default-value="""/>
        <both implementation="boolean" default-value=""false""/>
        <project implementation="org.apache.maven.project.MavenProject"
default-value="""/>
      </configuration>

------

Mykel

-- 

Never wear anything that panics the cat. -- P. J. O'Rourke

Re: Java Mojo parameter question

Posted by Mykel Alvis <my...@weirdness.com>.
Sorry in advance for the long post.

I'm attaching the entirety of the pom and the mojo I'm currently working on.
It's copied, more or less verbatim, from the Better Builds java example with
added stuff since I'm generating code.   Doing a mvn install generates the
plugin.xml specified below.  Note the configuration section of the
plugin.xml, specifically that for everything not a String or boolean except
outputDirectory, it generates a value of " (double quote).  Is this what's
supposed to happen?

Any insight into this would be appreciated.
Mykel


Mojo pom:
-------------
<?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../../../../maven-site/target/site/maven-v4_0_0.xsd
">
  <modelVersion>4.0.0</modelVersion>
  <groupId>javax.xml.plugins</groupId>
  <artifactId>maven-jaxrpc-plugin</artifactId>
  <name> Plugin for jaxrpc calls</name>
  <!-- Versions tied to jaxrpc version -->
  <version>1.1.3</version>
  <packaging>maven-plugin</packaging>
  <description>Maven plugin to wrap jaxrpc calls for wscompile and
wsdeploy.</description>
  <dependencies>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>jaxrpc-impl</artifactId>
      <version>1.1.3_01_EA</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-project</artifactId>
      <version>2.0.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-script-ant</artifactId>
      <version>2.0.2</version>
    </dependency>
    <dependency>
      <groupId>ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.6.5</version>
    </dependency>
  </dependencies>
  <distributionManagement>
     <repository>
        <id>local</id>
        <name>local</name>
        <url>file:////opt/maven-repo-local</url>
     </repository>
  </distributionManagement>
</project>

Mojo java code WSCompileMojo.java
-------------

package javax.xml.plugins;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.apache.tools.ant.Location;

import com.sun.xml.rpc.tools.ant.Wscompile;
import com.sun.xml.rpc.tools.wscompile.CompileTool;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

/**
 * Goal which runs the wscompile task
 *
 * @goal wscompile
 * @phase generate-sources
 * @requiresDependencyResolution compile
 */
public class WSCompileMojo
    extends AbstractMojo
{
    /**
     * Location of the file.
     * @parameter expression="${project.build.directory}"
     * @required
     */
    private File outputDirectory;

    /**
     * The set of dependencies required by the project
     * @parameter default-value="${project.dependencies}"
     * @required
     * @readonly
     */
    private java.util.Set dependencies;
    /**
     * Project instance, used to add new source directory to the build.
     * @parameter default-value="${project}"
     * @required
     * @readonly
     */
    private MavenProject project;
    /**
     * project-helper instance, used to make addition of resources
     * simpler.
     * @component
     */
    private MavenProjectHelper helper;
    /**
     * List of source roots containing non-test code.
     * @parameter default-value="${project.compileSourceRoots}"
     * @required
     * @readonly
     */
    private List sourceRoots;
    /**
     * List of Resource objects for the current build, containing
     * directory, includes, and excludes.
     * @parameter default-value="${project.resources}"
     * @required
     * @readonly
     */
    private List resources;

    /**
     * Base directory of work for the wscompile process.
     * @parameter
default-value="${project.build.directory}/generated-sources/jaxrpc-wscompile"

     * @required
     */
    private File base;
    /**
     * Both?
     * @parameter default-value="false"
     */
    private boolean both;
    /**
     * Case sensitive
     * @parameter default-value="false"
     */
    private boolean caseSensitive;
    /**
     * Generate Client
     * @parameter default-value="false"
     */
    private boolean client;
    /**
     * Config file location
     * @parameter
     * @required
     */
    private File configFile;
    /**
     * WSCompile debug
     * @parameter default-value="false"
     */
    private boolean debug;
    /**
     * Define
     * @parameter default-value="false"
     */
    private boolean define;
    /**
     * Description default-value=""
     * @parameter
     */
    private String description;
    /**
     * Excludes
     * @parameter
     */
    private String excludes;
    /**
     * ExcludesFile
     * @parameter
     */
    private File excludesFile;
    /**
     * Features
     * @parameter
     */
    private String features;
    /**
     * Follow Symbolic Links
     * @parameter default-value="false"
     */
    private boolean followSymLinks;
    /**
     * Gen
     * @parameter default-value="false"
     */
    private boolean gen;
    /**
     * Gen Import
     * @parameter default-value="false"
     */
    private boolean genImport;
    /**
     * Optimize
     * @parameter default-value="false"
     */
    private boolean optimize;
    /**
     * Keep
     * @parameter default-value="false"
     */
    private boolean keep;
    /**
     * Http proxy
     * @parameter
     */
    private String httpProxy;
    /**
     * Includes
     * @parameter
     */
    private String includes;
    /**
     * JVM Args
     * @parameter
     */
    private String jvmArgs;
    /**
     * Mapping File
     * @parameter
     */
    private File mappingFile;
    /**
     * Model File
     * @parameter
     */
    private File modelFile;
    /**
     * Non class dir
     * @parameter
     */
    private File nonClassDirFile;


    public void execute()
        throws MojoExecutionException
    {
        Log log = getLog();

//        CompileTool tool = new CompileTool(System.out,"wscompile");;

        Wscompile compiler = new Wscompile();
        compiler.setBase(base);
        log.debug("Base = " + base.getAbsolutePath());
        compiler.setBoth(both);
        log.debug("Both = " + both);
        compiler.setCaseSensitive(caseSensitive);
        log.debug("CaseSensitive = " + caseSensitive);
        compiler.setClient(client);
        log.debug("Client = " + client);
        compiler.setConfig(configFile);
        log.debug("ConfigFile = "+ configFile.getAbsolutePath());
        compiler.setDebug(debug);
        log.debug("Debug = " + debug);
        compiler.setDefine(define);
        log.debug("Define = " + define);
        compiler.setDescription(description);
        log.debug("Description = " + description);
        compiler.setExcludes(excludes);
        log.debug("Excludes = " + excludes);
        compiler.setExcludesfile(excludesFile);
        log.debug("ExcludesFile = " +
(excludesFile!=null?excludesFile.getAbsolutePath():"null"));
        compiler.setFeatures(features);
        log.debug("Features = " + features);
        compiler.setFollowSymlinks(followSymLinks);
        log.debug("Follow Symbolic Links = " + followSymLinks);
        compiler.setFork(true);
        log.debug("Fork = " + compiler.getFork());
        compiler.setGen(gen);
        log.debug("Gen = " + gen);
        compiler.setHTTPProxy(httpProxy);
        log.debug("Http proxy = " + httpProxy);
        compiler.setImport(genImport);
        log.debug("Import = " + genImport);
        compiler.setIncludes(includes);
        log.debug("Includes = " + includes);
        compiler.setJvmargs(jvmArgs);
        log.debug("jvm args = " + jvmArgs);
        compiler.setKeep(keep);
        log.debug("Keep = " + keep);
        //  TODO Look into this
//        Location location;
//        compiler.setLocation(location);
        compiler.setMapping(mappingFile);
        log.debug("Mapping File = " + ((mappingFile !=
null)?mappingFile.getAbsolutePath():null));
        compiler.setModel(modelFile);
        log.debug("Model File = " + ((modelFile !=
null)?modelFile.getAbsolutePath():null));
        compiler.setNonClassDir(nonClassDirFile);
        log.debug("Non Class Dir  = " + ((nonClassDirFile !=
null)?nonClassDirFile.getAbsolutePath():null));
        compiler.setOptimize(optimize);
        log.debug("Optimize = " + optimize);

        log.debug("Normally, I would execute here!");

    }
}


plugin.xml generated from mvn install on the above
-------------
<plugin>
  <description></description>
  <groupId>javax.xml.plugins</groupId>
  <artifactId>m2-jaxrpc-plugin</artifactId>
  <version>1.0-SNAPSHOT</version>
  <goalPrefix>m2-jaxrpc</goalPrefix>
  <isolatedRealm>false</isolatedRealm>
  <inheritedByDefault>true</inheritedByDefault>
  <mojos>
    <mojo>
      <goal>wscompile</goal>
      <description>Goal which runs the wscompile task</description>
      <requiresDependencyResolution>compile</requiresDependencyResolution>
      <requiresDirectInvocation>false</requiresDirectInvocation>
      <requiresProject>true</requiresProject>
      <requiresReports>false</requiresReports>
      <aggregator>false</aggregator>
      <requiresOnline>false</requiresOnline>
      <inheritedByDefault>true</inheritedByDefault>
      <phase>generate-sources</phase>
      <implementation>javax.xml.plugins.WSCompileMojo</implementation>
      <language>java</language>
      <instantiationStrategy>per-lookup</instantiationStrategy>
      <executionStrategy>once-per-session</executionStrategy>
      <parameters>
        <parameter>
          <name>base</name>
          <type>java.io.File</type>
          <required>true</required>
          <editable>true</editable>
          <description>Base directory of work for the wscompile
process.</description>
        </parameter>
        <parameter>
          <name>both</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Both?</description>
        </parameter>
        <parameter>
          <name>caseSensitive</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Case sensitive</description>
        </parameter>
        <parameter>
          <name>client</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Generate Client</description>
        </parameter>
        <parameter>
          <name>configFile</name>
          <type>java.io.File</type>
          <required>true</required>
          <editable>true</editable>
          <description>Config file location</description>
        </parameter>
        <parameter>
          <name>debug</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>WSCompile debug</description>
        </parameter>
        <parameter>
          <name>define</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Define</description>
        </parameter>
        <parameter>
          <name>dependencies</name>
          <type>java.util.Set</type>
          <required>true</required>
          <editable>false</editable>
          <description>The set of dependencies required by the
project</description>
        </parameter>
        <parameter>
          <name>description</name>
          <type>java.lang.String</type>
          <required>false</required>
          <editable>true</editable>
          <description>Description default-value=&quot;&quot;</description>
        </parameter>
        <parameter>
          <name>excludes</name>
          <type>java.lang.String</type>
          <required>false</required>
          <editable>true</editable>
          <description>Excludes</description>
        </parameter>
        <parameter>
          <name>excludesFile</name>
          <type>java.io.File</type>
          <required>false</required>
          <editable>true</editable>
          <description>ExcludesFile</description>
        </parameter>
        <parameter>
          <name>features</name>
          <type>java.lang.String</type>
          <required>false</required>
          <editable>true</editable>
          <description>Features</description>
        </parameter>
        <parameter>
          <name>followSymLinks</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Follow Symbolic Links</description>
        </parameter>
        <parameter>
          <name>gen</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Gen</description>
        </parameter>
        <parameter>
          <name>genImport</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Gen Import</description>
        </parameter>
        <parameter>
          <name>httpProxy</name>
          <type>java.lang.String</type>
          <required>false</required>
          <editable>true</editable>
          <description>Http proxy</description>
        </parameter>
        <parameter>
          <name>includes</name>
          <type>java.lang.String</type>
          <required>false</required>
          <editable>true</editable>
          <description>Includes</description>
        </parameter>
        <parameter>
          <name>jvmArgs</name>
          <type>java.lang.String</type>
          <required>false</required>
          <editable>true</editable>
          <description>JVM Args</description>
        </parameter>
        <parameter>
          <name>keep</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Keep</description>
        </parameter>
        <parameter>
          <name>mappingFile</name>
          <type>java.io.File</type>
          <required>false</required>
          <editable>true</editable>
          <description>Mapping File</description>
        </parameter>
        <parameter>
          <name>modelFile</name>
          <type>java.io.File</type>
          <required>false</required>
          <editable>true</editable>
          <description>Model File</description>
        </parameter>
        <parameter>
          <name>nonClassDirFile</name>
          <type>java.io.File</type>
          <required>false</required>
          <editable>true</editable>
          <description>Non class dir</description>
        </parameter>
        <parameter>
          <name>optimize</name>
          <type>boolean</type>
          <required>false</required>
          <editable>true</editable>
          <description>Optimize</description>
        </parameter>
        <parameter>
          <name>outputDirectory</name>
          <type>java.io.File</type>
          <required>true</required>
          <editable>true</editable>
          <description>Location of the file.</description>
        </parameter>
        <parameter>
          <name>project</name>
          <type>org.apache.maven.project.MavenProject</type>
          <required>true</required>
          <editable>false</editable>
          <description>Project instance, used to add new source directory to
the build.</description>
        </parameter>
        <parameter>
          <name>resources</name>
          <type>java.util.List</type>
          <required>true</required>
          <editable>false</editable>
          <description>List of Resource objects for the current build,
containing directory, includes, and excludes.</description>
        </parameter>
        <parameter>
          <name>sourceRoots</name>
          <type>java.util.List</type>
          <required>true</required>
          <editable>false</editable>
          <description>List of source roots containing non-test
code.</description>
        </parameter>
      </parameters>
      <configuration>
        <gen implementation="boolean" default-value=""false""/>
        <define implementation="boolean" default-value=""false""/>
        <dependencies implementation="java.util.Set" default-value="""/>
        <resources implementation="java.util.List" default-value="""/>
        <both implementation="boolean" default-value=""false""/>
        <client implementation="boolean" default-value=""false""/>
        <base implementation="java.io.File" default-value="""/>
        <caseSensitive implementation="boolean" default-value=""false""/>
        <debug implementation="boolean" default-value=""false""/>
        <followSymLinks implementation="boolean" default-value=""false""/>
        <outputDirectory implementation="java.io.File">${
project.build.directory}</outputDirectory>
        <sourceRoots implementation="java.util.List" default-value="""/>
        <genImport implementation="boolean" default-value=""false""/>
        <keep implementation="boolean" default-value=""false""/>
        <project implementation="org.apache.maven.project.MavenProject"
default-value="""/>
        <optimize implementation="boolean" default-value=""false""/>
      </configuration>
      <requirements>
        <requirement>
          <role>org.apache.maven.project.MavenProjectHelper</role>
          <field-name>helper</field-name>
        </requirement>
      </requirements>
    </mojo>
  </mojos>
  <dependencies/>
</plugin>

Snippet from pom.xml utilizing this plugin
-----------
.
.
.
  <build>
    <plugins>
           <plugin>
           <groupId>javax.xml.plugins</groupId>
          <artifactId>m2-jaxrpc-plugin</artifactId>
          <executions>
            <execution>
              <configuration>
                  <configFile>/tmp</configFile>
              </configuration>
              <goals>
                <goal>wscompile</goal>
              </goals>
            </execution>
           </executions>
         </plugin>
    </plugins>
   </build>
.
.
.



Output of mvn compile
-----------
[malvis@pds1215 wsclientstubs]$ mvn compile
[INFO] Scanning for projects...
[INFO]
----------------------------------------------------------------------------
[INFO] Building Web Service client stub
[INFO]    task-segment: [compile]
[INFO]
----------------------------------------------------------------------------
[INFO]
------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO]
------------------------------------------------------------------------
[INFO] Failed to configure plugin parameters for:
javax.xml.plugins:m2-jaxrpc-plugin:1.0-SNAPSHOT

    (found static expression: '' which may act as a default value).


Cause: Cannot assign configuration entry 'dependencies' to 'interface
java.util.Set' from '', which is of type class java.lang.String
[INFO]
------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Wed Jul 05 13:24:21 CDT 2006
[INFO] Final Memory: 3M/6M
[INFO]
------------------------------------------------------------------------

-- 

Never wear anything that panics the cat. -- P. J. O'Rourke

Re: Java Mojo parameter question

Posted by Mykel Alvis <my...@weirdness.com>.
Oops.  I changed the type from File to String between the time I generated
the plugin.xml.  Sorry.  The type of base should be "File".

On 7/5/06, Mykel Alvis <my...@weirdness.com> wrote:
>
>
> If I have the following parameters in my mojo (among others)
> -----
>     /**
>      * Base directory of work for the wscompile process.
>      * @parameter default-value="${project.build.directory}/generated-sources/jaxrpc-wscompile"
>
>      * @required
>      */
>     private String base;
>     /**
>      * Both?
>      * @parameter default-value="false"
>      */
>     private boolean both;
> ----
>
> shouldn't it generate something more  interesting than this in the "<base"
> configuration, or does that happen as part of the FM of maven mojos?
>
> ------
>         <parameter>
>           <name>sourceRoots</name>
>           <type>java.util.List</type>
>           <required>true</required>
>           <editable>false</editable>
>           <description>List of source roots containing non-test
> code.</description>
>         </parameter>
>       </parameters>
>       <configuration>
>         <base implementation="java.io.File" default-value="""/>
>         <dependencies implementation=" java.util.Set" default-value="""/>
>         <outputDirectory implementation="java.io.File">${
> project.build.directory}</outputDirectory>
>         <sourceRoots implementation=" java.util.List" default-value="""/>
>         <resources implementation="java.util.List" default-value="""/>
>         <both implementation="boolean" default-value=""false""/>
>         <project implementation="org.apache.maven.project.MavenProject"
> default-value="""/>
>       </configuration>
>
> ------
>
> Mykel
>
> --
>
> Never wear anything that panics the cat. -- P. J. O'Rourke
>



-- 

Never wear anything that panics the cat. -- P. J. O'Rourke