Index: webstart-jarsigner-api/src/main/java/org/codehaus/mojo/webstart/SignConfig.java
===================================================================
--- webstart-jarsigner-api/src/main/java/org/codehaus/mojo/webstart/SignConfig.java	(revision 0)
+++ webstart-jarsigner-api/src/main/java/org/codehaus/mojo/webstart/SignConfig.java	(revision 0)
@@ -0,0 +1,47 @@
+package org.codehaus.mojo.webstart;
+
+/*
+ * Copyright 2001-2007 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License" );
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.plugin.logging.Log;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+
+/**
+ * Bean that represents the JarSigner configuration.
+ *
+ * @author <a href="jerome@coffeebreaks.org">Jerome Lacoste</a>
+ * @version $Id: SignConfig.java 1403 2006-01-27 02:36:18Z carlos $
+ */
+public interface SignConfig {
+    /**
+     * Returns a fully configured version of a Mojo ready to sign jars.
+     * @return
+     */
+    JarSignerMojo getJarSignerMojo() 
+        throws MojoExecutionException, MojoFailureException;
+    
+    /**
+     * Called before any Jars get signed. This method allows you to
+     * create any keys or perform any initialisation that the
+     * method of signature that you're implementing requires.
+     */
+    void init(Log log, File workingDirectory, boolean verbose)
+        throws MojoExecutionException, MojoFailureException;
+}
Index: webstart-jarsigner-api/src/main/java/org/codehaus/mojo/webstart/JarSignerMojo.java
===================================================================
--- webstart-jarsigner-api/src/main/java/org/codehaus/mojo/webstart/JarSignerMojo.java	(revision 0)
+++ webstart-jarsigner-api/src/main/java/org/codehaus/mojo/webstart/JarSignerMojo.java	(revision 0)
@@ -0,0 +1,68 @@
+package org.codehaus.mojo.webstart;
+
+/*
+ * Copyright 2001-2007 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License" );
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+
+/**
+ * Provides an abstraction for all Mojos that are capable of signing
+ * jar files. Most use cases will involve signing jars with the keytool
+ * provided with the java development kit. However, a particular enterprise
+ * may require a different method of signing jars.
+ * 
+ * In a corporate environment, PCs typically have a company certificate
+ * installed so that applications like Java Webstart know that when
+ * code is signed by the company certificate it can be trusted. Companies
+ * don't want to expose this certificate's private key to individual
+ * developers. Instead, the company needs to keep the key secret and provide
+ * a customised way of developers submitting jar files to be signed.
+ * 
+ * This interface allows enterprise users to develop a Mojo which doesn't
+ * use the java keytool to sign jars. For example, the Maven Webstart
+ * plugin signs jars as part of its operation. Using this interface, the
+ * Webstart plugin is able to use pluggable jar signers (although it will
+ * use JarSignMojo as a default) so that the user can plug in a custom
+ * Mojo to sign their jars.
+ */
+public interface JarSignerMojo {
+    /**
+     * Sets the location of the unsigned jar file.
+     * @param jarPath
+     */
+    void setJarPath(File jarPath);
+    
+    /**
+     * Sets the output filename for the signed jar.
+     * This may be the same location as specified in setJarPath(). If this
+     * is the case, the unsigned jar file will be overwritten with the
+     * signed jar file.
+     * @param signedJar
+     */
+    void setSignedJar(File signedJar);
+    
+    /**
+     * Executes the jar signing process.
+     * 
+     * Same throws declaration as AbstractMojo.execute() 
+     * @throws MojoExecutionException
+     * @throws MojoFailureException
+     */
+    void execute() throws MojoExecutionException, MojoFailureException;
+}
Index: webstart-jarsigner-api/pom.xml
===================================================================
--- webstart-jarsigner-api/pom.xml	(revision 0)
+++ webstart-jarsigner-api/pom.xml	(revision 0)
@@ -0,0 +1,14 @@
+<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 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.codehaus.mojo</groupId>
+    <artifactId>webstart-maven-plugin-parent</artifactId>
+    <version>1.0-alpha-2-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>webstart-jarsigner-api</artifactId>
+  <name>Maven Webstart Pluggable JarSigner API</name>
+  <inceptionYear>2007</inceptionYear>
+</project>
Index: pom.xml
===================================================================
--- pom.xml	(revision 3560)
+++ pom.xml	(working copy)
@@ -60,6 +60,7 @@
   </contributors>
 
   <modules>
+    <module>webstart-jarsigner-api</module> <!-- TODO: better name ??-->
     <module>plugin</module> <!-- TODO: better name ??-->
     <module>pack200-anttasks</module>
     <!--module>jnlp-servlet</module-->
Index: plugin/src/test/java/org/codehaus/mojo/webstart/JarUnsignMojoTest.java
===================================================================
--- plugin/src/test/java/org/codehaus/mojo/webstart/JarUnsignMojoTest.java	(revision 3560)
+++ plugin/src/test/java/org/codehaus/mojo/webstart/JarUnsignMojoTest.java	(working copy)
@@ -50,7 +50,7 @@
 {
     private JarUnsignMojo mojo;
     private File tempdir;
-    private SignConfig sign;
+    private JarSignMojoConfig sign;
     private MavenEmbedder embedder;
 
     public void setUp()
@@ -81,7 +81,7 @@
 
         keystore.delete();
 
-        sign = new SignConfig();
+        sign = new JarSignMojoConfig();
         sign.setAlias( "test" );
         sign.setKeypass( "123456" );
         sign.setKeystore( keystore.getAbsolutePath() );
Index: plugin/src/test/java/org/codehaus/mojo/webstart/SignConfigTest.java
===================================================================
--- plugin/src/test/java/org/codehaus/mojo/webstart/SignConfigTest.java	(revision 3560)
+++ plugin/src/test/java/org/codehaus/mojo/webstart/SignConfigTest.java	(working copy)
@@ -51,7 +51,7 @@
 
     public void testGetDname()
     {
-        SignConfig signConfig = new SignConfig();
+        JarSignMojoConfig signConfig = new JarSignMojoConfig();
         signConfig.setDnameCn( "www.example.com" );
         signConfig.setDnameOu( "None" );
         signConfig.setDnameL( "Seattle" );
@@ -63,7 +63,7 @@
 
     public void testGetDnameMissing()
     {
-        SignConfig signConfig = new SignConfig();
+        JarSignMojoConfig signConfig = new JarSignMojoConfig();
         signConfig.setDnameCn( "www.example.com" );
         //signConfig.setDnameOu( "None" );
         signConfig.setDnameL( "Seattle" );
Index: plugin/src/test/projects/project1/pom.xml
===================================================================
--- plugin/src/test/projects/project1/pom.xml	(revision 3560)
+++ plugin/src/test/projects/project1/pom.xml	(working copy)
@@ -60,13 +60,14 @@
             <dnameC>US</dnameC>
 
             <verify>true</verify>
+
+            <keystore>
+              <delete>true</delete>
+              <gen>true</gen>
+            </keystore>
+
           </sign>
 
-          <keystore>
-            <delete>true</delete>
-            <gen>true</gen>
-          </keystore>
-
           <verbose>false</verbose>
         </configuration>
       </plugin>
Index: plugin/src/test/projects/project4/pom.xml
===================================================================
--- plugin/src/test/projects/project4/pom.xml	(revision 3560)
+++ plugin/src/test/projects/project4/pom.xml	(working copy)
@@ -4,7 +4,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <artifactId>webstart-test-4</artifactId>
-  <groupId>org.apache.maven.plugins</groupId>
+  <groupId>org.codehaus.mojo</groupId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>Test Case #1 for MWEBSTART-26</name>
Index: plugin/src/test/projects/project5/test/src/main/java/org/codehaus/mojo/webstart/test/Test.java
===================================================================
--- plugin/src/test/projects/project5/test/src/main/java/org/codehaus/mojo/webstart/test/Test.java	(revision 0)
+++ plugin/src/test/projects/project5/test/src/main/java/org/codehaus/mojo/webstart/test/Test.java	(revision 0)
@@ -0,0 +1,19 @@
+package org.codehaus.mojo.webstart.test;
+
+import org.apache.commons.io.IOUtils;
+import java.net.URL;
+import java.io.InputStream;
+
+public class Test
+{
+  public static void main( String[] args )
+    throws Exception
+  {
+     InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
+     try {
+       System.out.println( IOUtils.toString( in ) );
+     } finally {
+       IOUtils.closeQuietly( in );
+     }
+  }
+}
Index: plugin/src/test/projects/project5/test/src/main/jnlp/template.vm
===================================================================
--- plugin/src/test/projects/project5/test/src/main/jnlp/template.vm	(revision 0)
+++ plugin/src/test/projects/project5/test/src/main/jnlp/template.vm	(revision 0)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp
+    spec="1.0+"
+    codebase="http://www.domaine.com/webstart/"
+    href="$outputFile">
+  <information>
+    <title>$informationTitle</title>
+    <vendor>$informationVendor<vendor/>
+    <homepage>$informationHomepage<homepage/>
+    <description kind="one-line">$informationDescription</description>
+  </information>
+  <security>
+     <all-permissions/>
+  </security>
+  <resources>
+    <j2se version="1.4+"
+     initial-heap-size="32m"
+     max-heap-size="128m"
+     />
+     $dependencies
+  </resources>
+  <application-desc main-class="$mainClass">
+    <argument>1</argument>
+    <argument>2</argument>
+  </application-desc>
+</jnlp>
Index: plugin/src/test/projects/project5/test/pom.xml
===================================================================
--- plugin/src/test/projects/project5/test/pom.xml	(revision 0)
+++ plugin/src/test/projects/project5/test/pom.xml	(revision 0)
@@ -0,0 +1,74 @@
+<!-- Test project which creates and signs a jar artifact -->
+<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 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>webstart-test-5</artifactId>
+  <groupId>org.codehaus.mojo</groupId>
+  <version>1.0</version>
+  <packaging>jar</packaging>
+  <description>Check that execution fails if dependencies contains some invalid deps</description>
+
+  <organization>
+    <name>CoffeeBreaks</name>
+    <url>http://www.CoffeeBreaks.org</url>
+  </organization>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>webstart-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>jnlp-inline</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+
+          <jnlp>
+            <!-- we play with the resource path and template relative path to test MOJO-391 -->
+            <!--inputTemplateResourcePath>${project.basedir}/src/</inputTemplateResourcePath>
+            <inputTemplate>jnlp/template.vm</inputTemplate-->
+            <outputFile>test.jnlp</outputFile>
+            <mainClass>org.codehaus.mojo.webstart.test.Test</mainClass>
+          </jnlp>
+
+          <!-- SIGNING -->
+          <!-- defining this will automatically sign the jar and its dependencies -->
+          <sign implementation="org.codehaus.mojo.webstart.test.mysigner.MyJarSignMojoConfig">
+            <param>HelloWorld</param>
+          </sign>
+          <verbose>false</verbose>
+        </configuration>
+
+
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.mojo.webstart.test</groupId>
+      <artifactId>my-test-signer</artifactId>
+      <version>1.0</version>
+    </dependency>
+  </dependencies>
+
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.1</version>
+    </dependency>
+  </dependencies>
+
+</project>
Index: plugin/src/test/projects/project5/pom.xml
===================================================================
--- plugin/src/test/projects/project5/pom.xml	(revision 0)
+++ plugin/src/test/projects/project5/pom.xml	(revision 0)
@@ -0,0 +1,17 @@
+<!-- Test project which signs a jar artifact using a separate signer -->
+<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 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>webstart-test-4</artifactId>
+  <groupId>org.apache.maven.plugins</groupId>
+  <version>1.0</version>
+  <packaging>jar</packaging>
+  <name>Manual test Case #5 for MWEBSTART-18</name>
+  <description>Check that the separate signer is used for signing jars</description>
+
+  <modules>
+    <module>mysigner</module>
+    <module>test</module>
+  </modules>
+</project>
Index: plugin/src/test/projects/project5/mysigner/src/main/java/org/codehaus/mojo/webstart/test/mysigner/MySignerMojo.java
===================================================================
--- plugin/src/test/projects/project5/mysigner/src/main/java/org/codehaus/mojo/webstart/test/mysigner/MySignerMojo.java	(revision 0)
+++ plugin/src/test/projects/project5/mysigner/src/main/java/org/codehaus/mojo/webstart/test/mysigner/MySignerMojo.java	(revision 0)
@@ -0,0 +1,72 @@
+package org.codehaus.mojo.webstart.test.mysigner;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License" );
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.logging.Log;
+
+import org.codehaus.mojo.webstart.JarSignerMojo;
+
+import java.io.File;
+
+/**
+ * Bean that represents the JarSigner configuration.
+ * 
+ * Specific to the JarSignMojo
+ *
+ * @author <a href="jerome@coffeebreaks.org">Jerome Lacoste</a>
+ * @version $Id: SignConfig.java 1403 2006-01-27 02:36:18Z carlos $
+ */
+public class MySignerMojo extends AbstractMojo implements JarSignerMojo {
+
+    /**
+     *
+     * @parameter expression="${param}"
+     * @required
+     */
+    String param;
+
+    /**
+     * Sets the location of the unsigned jar file.
+     * @param jarPath
+     */
+    public void setJarPath(File jarPath) {
+        getLog().info( "ignoring jar path " + jarPath );
+    }
+    
+    /**
+     * Sets the output filename for the signed jar.
+     * This may be the same location as specified in setJarPath(). If this
+     * is the case, the unsigned jar file will be overwritten with the
+     * signed jar file.
+     * @param signedJar
+     */
+    public void setSignedJar(File signedJar) {
+        getLog().info( "ignoring signed jar " + signedJar );
+    }
+    
+    /**
+     * Executes the jar signing process.
+     * 
+     * Same throws declaration as AbstractMojo.execute() 
+     * @throws MojoExecutionException
+     * @throws MojoFailureException
+     */
+    public void execute() {
+        getLog().info( "executing fake signer: param: <" + param + ">" );
+    }
+}
Index: plugin/src/test/projects/project5/mysigner/src/main/java/org/codehaus/mojo/webstart/test/mysigner/MyJarSignMojoConfig.java
===================================================================
--- plugin/src/test/projects/project5/mysigner/src/main/java/org/codehaus/mojo/webstart/test/mysigner/MyJarSignMojoConfig.java	(revision 0)
+++ plugin/src/test/projects/project5/mysigner/src/main/java/org/codehaus/mojo/webstart/test/mysigner/MyJarSignMojoConfig.java	(revision 0)
@@ -0,0 +1,99 @@
+package org.codehaus.mojo.webstart.test.mysigner;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License" );
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugin.logging.Log;
+
+import org.codehaus.mojo.webstart.SignConfig;
+
+import org.codehaus.mojo.webstart.JarSignerMojo;
+/*
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.IncludesArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.PluginManager;
+import org.apache.maven.plugin.jar.JarSignMojo;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.settings.Settings;
+
+import org.codehaus.mojo.keytool.GenkeyMojo;
+import org.codehaus.mojo.webstart.generator.Generator;
+import org.codehaus.plexus.archiver.zip.ZipArchiver;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.DirectoryScanner;
+
+import org.apache.commons.lang.SystemUtils;
+
+
+import java.io.FileFilter;
+import java.io.IOException;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+*/
+
+import java.io.File;
+
+/**
+ * Bean that represents the JarSigner configuration.
+ * 
+ * Specific to the JarSignMojo
+ *
+ * @author <a href="jerome@coffeebreaks.org">Jerome Lacoste</a>
+ * @version $Id: SignConfig.java 1403 2006-01-27 02:36:18Z carlos $
+ */
+public class MyJarSignMojoConfig implements SignConfig {
+    
+    /**
+     * Returns a fully configured version of a Mojo ready to sign jars.
+     * @return
+     */
+    public JarSignerMojo getJarSignerMojo() {
+        MySignerMojo signJar = new MySignerMojo();
+        
+        signJar.param = getParam();
+        
+        return signJar;
+    }
+    
+    public void init(Log log, File workDirectory, boolean verbose) {
+    }
+
+    /**
+     */
+    private String param;
+
+    public void setParam( String param ) {
+        this.param = param;
+    }
+
+    public String getParam() {
+        return param;
+    }
+}
Index: plugin/src/test/projects/project5/mysigner/pom.xml
===================================================================
--- plugin/src/test/projects/project5/mysigner/pom.xml	(revision 0)
+++ plugin/src/test/projects/project5/mysigner/pom.xml	(revision 0)
@@ -0,0 +1,89 @@
+<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 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.codehaus.mojo.webstart.test</groupId>
+  <version>1.0</version>
+  <artifactId>my-test-signer</artifactId>
+  <name>Test Signer</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.mojo</groupId>
+      <artifactId>webstart-jarsigner-api</artifactId>
+      <version>1.0-alpha-2-SNAPSHOT</version>
+    </dependency>
+
+    <!--dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>2.0.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>2.0.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-descriptor</artifactId>
+      <version>2.0.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-settings</artifactId>
+      <version>2.0.1</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>1.0.5</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugins</groupId>
+      <artifactId>maven-jar-plugin</artifactId>
+      <version>2.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.mojo</groupId>
+      <artifactId>keytool-maven-plugin</artifactId>
+      <version>1.0-beta-1</version>
+    </dependency>
+    <dependency>
+      <groupId>velocity</groupId>
+      <artifactId>velocity</artifactId>
+      <version>1.4</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.reporting</groupId>
+      <artifactId>maven-reporting-api</artifactId>
+      <version>2.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.reporting</groupId>
+      <artifactId>maven-reporting-impl</artifactId>
+      <version>2.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-plugin-testing-harness</artifactId>
+      <version>1.0-beta-1</version>
+      <scope>test</scope>
+    </dependency-->
+  </dependencies>
+</project>
Index: plugin/src/main/java/org/codehaus/mojo/webstart/JarSignMojo2.java
===================================================================
--- plugin/src/main/java/org/codehaus/mojo/webstart/JarSignMojo2.java	(revision 0)
+++ plugin/src/main/java/org/codehaus/mojo/webstart/JarSignMojo2.java	(revision 0)
@@ -0,0 +1,31 @@
+package org.codehaus.mojo.webstart;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License" );
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugin.jar.JarSignMojo;
+
+/**
+ * Just exists to make JarSignMojo implement JarSignerMojo.
+ * 
+ * The JarSignerMojo interface should be moved to the jar plugin.
+ * 
+ * @author dboden
+ *
+ */
+class JarSignMojo2 extends JarSignMojo implements JarSignerMojo {
+
+}
\ No newline at end of file
Index: plugin/src/main/java/org/codehaus/mojo/webstart/SignConfig.java
===================================================================
--- plugin/src/main/java/org/codehaus/mojo/webstart/SignConfig.java	(revision 3560)
+++ plugin/src/main/java/org/codehaus/mojo/webstart/SignConfig.java	(working copy)
@@ -1,292 +0,0 @@
-package org.codehaus.mojo.webstart;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License" );
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Bean that represents the JarSigner configuration
- *
- * @author <a href="jerome@coffeebreaks.org">Jerome Lacoste</a>
- * @version $Id$
- */
-public class SignConfig
-{
-    /**
-     */
-    private String keystore;
-
-    /**
-     */
-    private String keyalg;
-
-    /**
-     */
-    private String keysize;
-
-    /**
-     */
-    private String sigalg;
-
-    /**
-     */
-    private String sigfile;
-
-    /**
-     */
-    private String storetype;
-
-    /**
-     */
-    private String storepass;
-
-    /**
-     */
-    private String keypass;
-
-    /**
-     */
-    private String validity;
-
-    /**
-     */
-    private String dnameCn;
-
-    /**
-     */
-    private String dnameOu;
-
-    /**
-     */
-    private String dnameL;
-
-    /**
-     */
-    private String dnameSt;
-
-    /**
-     */
-    private String dnameO;
-
-    /**
-     */
-    private String dnameC;
-
-    /**
-     */
-    private String alias;
-
-    /**
-     * Whether we want to auto-verify the signed jars.
-     */
-    private boolean verify;
-
-    public void setKeystore( String keystore )
-    {
-        this.keystore = keystore;
-    }
-
-    public void setKeyalg( String keyalg )
-    {
-        this.keyalg = keyalg;
-    }
-
-    public void setKeysize( String keysize )
-    {
-        this.keysize = keysize;
-    }
-
-    public void setSigalg( String sigalg )
-    {
-        this.sigalg = sigalg;
-    }
-
-    public void setSigfile( String sigfile )
-    {
-        this.sigfile = sigfile;
-    }
-
-    public void setStoretype( String storetype )
-    {
-        this.storetype = storetype;
-    }
-
-    public void setStorepass( String storepass )
-    {
-        this.storepass = storepass;
-    }
-
-    public void setKeypass( String keypass )
-    {
-        this.keypass = keypass;
-    }
-
-    public void setValidity( String validity )
-    {
-        this.validity = validity;
-    }
-
-    public void setDnameCn( String dnameCn )
-    {
-        this.dnameCn = dnameCn;
-    }
-
-    public void setDnameOu( String dnameOu )
-    {
-        this.dnameOu = dnameOu;
-    }
-
-    public void setDnameL( String dnameL )
-    {
-        this.dnameL = dnameL;
-    }
-
-    public void setDnameSt( String dnameSt )
-    {
-        this.dnameSt = dnameSt;
-    }
-
-    public void setDnameO( String dnameO )
-    {
-        this.dnameO = dnameO;
-    }
-
-    public void setDnameC( String dnameC )
-    {
-        this.dnameC = dnameC;
-    }
-
-    public void setAlias( String alias )
-    {
-        this.alias = alias;
-    }
-
-    public void setVerify( boolean verify )
-    {
-        this.verify = verify;
-    }
-
-    public String getKeystore()
-    {
-        return keystore;
-    }
-
-    public String getKeyalg()
-    {
-        return keyalg;
-    }
-
-    public String getKeysize()
-    {
-        return keysize;
-    }
-
-    public String getSigalg()
-    {
-        return sigalg;
-    }
-
-    public String getSigfile()
-    {
-        return sigfile;
-    }
-
-    public String getStoretype()
-    {
-        return storetype;
-    }
-
-    public String getStorepass()
-    {
-        return storepass;
-    }
-
-    public String getKeypass()
-    {
-        return keypass;
-    }
-
-    public String getValidity()
-    {
-        return validity;
-    }
-
-    public String getDnameCn()
-    {
-        return dnameCn;
-    }
-
-    public String getDnameOu()
-    {
-        return dnameOu;
-    }
-
-    public String getDnameL()
-    {
-        return dnameL;
-    }
-
-    public String getDnameSt()
-    {
-        return dnameSt;
-    }
-
-    public String getDnameO()
-    {
-        return dnameO;
-    }
-
-    public String getDnameC()
-    {
-        return dnameC;
-    }
-
-    public String getAlias()
-    {
-        return alias;
-    }
-
-    public boolean getVerify()
-    {
-        return verify;
-    }
-
-    public String getDname()
-    {
-        StringBuffer buffer = new StringBuffer( 128 );
-
-        appendToDnameBuffer( dnameCn, buffer, "CN" );
-        appendToDnameBuffer( dnameOu, buffer, "OU" );
-        appendToDnameBuffer( dnameL, buffer, "L" );
-        appendToDnameBuffer( dnameSt, buffer, "ST" );
-        appendToDnameBuffer( dnameO, buffer, "O" );
-        appendToDnameBuffer( dnameC, buffer, "C" );
-
-        return buffer.toString();
-    }
-
-    private void appendToDnameBuffer( final String property, StringBuffer buffer, final String prefix )
-    {
-        if ( property != null )
-        {
-            if ( buffer.length() > 0 )
-            {
-                buffer.append( ", " );
-            }
-            buffer.append( prefix ).append( "=" );
-            buffer.append( property );
-        }
-    }
-}
Index: plugin/src/main/java/org/codehaus/mojo/webstart/JarSignMojoConfig.java
===================================================================
--- plugin/src/main/java/org/codehaus/mojo/webstart/JarSignMojoConfig.java	(revision 0)
+++ plugin/src/main/java/org/codehaus/mojo/webstart/JarSignMojoConfig.java	(revision 0)
@@ -0,0 +1,427 @@
+package org.codehaus.mojo.webstart;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License" );
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugin.logging.Log;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.IncludesArtifactFilter;
+import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.PluginManager;
+import org.apache.maven.plugin.jar.JarSignMojo;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.settings.Settings;
+
+import org.codehaus.mojo.keytool.GenkeyMojo;
+import org.codehaus.mojo.webstart.generator.Generator;
+import org.codehaus.plexus.archiver.zip.ZipArchiver;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.DirectoryScanner;
+
+import org.apache.commons.lang.SystemUtils;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Bean that represents the JarSigner configuration.
+ * 
+ * Specific to the JarSignMojo
+ *
+ * @author <a href="jerome@coffeebreaks.org">Jerome Lacoste</a>
+ * @version $Id: SignConfig.java 1403 2006-01-27 02:36:18Z carlos $
+ */
+public class JarSignMojoConfig implements SignConfig {
+    
+    protected Log log;
+    protected File workDirectory;
+    protected boolean verbose;
+    
+    /**
+     * Returns a fully configured version of a Mojo ready to sign jars.
+     * @return
+     */
+    public JarSignerMojo getJarSignerMojo() {
+        JarSignMojo2 signJar = new JarSignMojo2();
+        
+        signJar.setAlias( getAlias() );
+        signJar.setKeypass( getKeypass() );
+        signJar.setKeystore( getKeystore() );
+        signJar.setSigFile( getSigfile() );
+        signJar.setStorepass( getStorepass() );
+        signJar.setType( getStoretype() );
+        signJar.setVerify( getVerify() );
+        signJar.setWorkingDir( workDirectory );
+        signJar.setVerbose( verbose );
+        signJar.setLog( log );
+        
+        return signJar;
+    }
+    
+    public void init(Log log, File workDirectory, boolean verbose) throws MojoExecutionException, MojoFailureException {
+        this.log = log;
+        this.workDirectory = workDirectory;
+        this.verbose = verbose;
+        
+        if ( keystoreConfig != null && keystoreConfig.isGen() )
+        {
+            if ( keystoreConfig.isDelete() )
+            {
+                deleteKeyStore();
+            }
+            genKeyStore();
+        }
+    }
+    
+    
+    public static class KeystoreConfig
+    {
+        private boolean delete;
+
+        private boolean gen;
+
+        public boolean isDelete()
+        {
+            return delete;
+        }
+
+        public void setDelete( boolean delete )
+        {
+            this.delete = delete;
+        }
+
+        public boolean isGen()
+        {
+            return gen;
+        }
+
+        public void setGen( boolean gen )
+        {
+            this.gen = gen;
+        }
+    }
+    
+    
+    private KeystoreConfig keystoreConfig;
+    
+    /**
+     */
+    private String keystore;
+
+    /**
+     */
+    private String keyalg;
+
+    /**
+     */
+    private String keysize;
+
+    /**
+     */
+    private String sigalg;
+
+    /**
+     */
+    private String sigfile;
+
+    /**
+     */
+    private String storetype;
+
+    /**
+     */
+    private String storepass;
+
+    /**
+     */
+    private String keypass;
+
+    /**
+     */
+    private String validity;
+
+    /**
+     */
+    private String dnameCn;
+
+    /**
+     */
+    private String dnameOu;
+
+    /**
+     */
+    private String dnameL;
+
+    /**
+     */
+    private String dnameSt;
+
+    /**
+     */
+    private String dnameO;
+
+    /**
+     */
+    private String dnameC;
+
+    /**
+     */
+    private String alias;
+
+    /**
+     * Whether we want to auto-verify the signed jars.
+     */
+    private boolean verify;
+    
+    public void setKeystoreConfig( KeystoreConfig keystoreConfig ) {
+        this.keystoreConfig = keystoreConfig;
+    }
+
+    public void setKeystore( String keystore ) {
+        this.keystore = keystore;
+    }
+
+    public void setKeyalg( String keyalg ) {
+        this.keyalg = keyalg;
+    }
+
+    public void setKeysize( String keysize ) {
+        this.keysize = keysize;
+    }
+
+    public void setSigalg( String sigalg ) {
+        this.sigalg = sigalg;
+    }
+
+    public void setSigfile( String sigfile ) {
+        this.sigfile = sigfile;
+    }
+
+    public void setStoretype( String storetype ) {
+        this.storetype = storetype;
+    }
+
+    public void setStorepass( String storepass ) {
+        this.storepass = storepass;
+    }
+
+    public void setKeypass( String keypass ) {
+        this.keypass = keypass;
+    }
+
+    public void setValidity( String validity ) {
+        this.validity = validity;
+    }
+
+    public void setDnameCn( String dnameCn ) {
+        this.dnameCn = dnameCn;
+    }
+
+    public void setDnameOu( String dnameOu ) {
+        this.dnameOu = dnameOu;
+    }
+
+    public void setDnameL( String dnameL ) {
+        this.dnameL = dnameL;
+    }
+
+    public void setDnameSt( String dnameSt ) {
+        this.dnameSt = dnameSt;
+    }
+
+    public void setDnameO( String dnameO ) {
+        this.dnameO = dnameO;
+    }
+
+    public void setDnameC( String dnameC ) {
+        this.dnameC = dnameC;
+    }
+
+    public void setAlias( String alias ) {
+        this.alias = alias;
+    }
+
+    public void setVerify( boolean verify ) {
+        this.verify = verify;
+    }
+
+    public String getKeystore() {
+        return keystore;
+    }
+
+    public String getKeyalg() {
+        return keyalg;
+    }
+
+    public String getKeysize() {
+        return keysize;
+    }
+
+    public String getSigalg() {
+        return sigalg;
+    }
+
+    public String getSigfile() {
+        return sigfile;
+    }
+
+    public String getStoretype() {
+        return storetype;
+    }
+
+    public String getStorepass() {
+        return storepass;
+    }
+
+    public String getKeypass() {
+        return keypass;
+    }
+
+    public String getValidity() {
+        return validity;
+    }
+
+    public String getDnameCn() {
+        return dnameCn;
+    }
+
+    public String getDnameOu() {
+        return dnameOu;
+    }
+
+    public String getDnameL() {
+        return dnameL;
+    }
+
+    public String getDnameSt() {
+        return dnameSt;
+    }
+
+    public String getDnameO() {
+        return dnameO;
+    }
+
+    public String getDnameC() {
+        return dnameC;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public boolean getVerify() {
+        return verify;
+    }
+
+    public String getDname() {
+        StringBuffer buffer = new StringBuffer( 128 );
+
+        appendToDnameBuffer( dnameCn, buffer, "CN" );
+        appendToDnameBuffer( dnameOu, buffer, "OU" );
+        appendToDnameBuffer( dnameL, buffer, "L" );
+        appendToDnameBuffer( dnameSt, buffer, "ST" );
+        appendToDnameBuffer( dnameO, buffer, "O" );
+        appendToDnameBuffer( dnameC, buffer, "C" );
+
+        return buffer.toString();
+    }
+
+    private void appendToDnameBuffer( final String property, StringBuffer buffer, final String prefix ) {
+        if ( property != null ) {
+            if ( buffer.length() > 0)
+            {
+                buffer.append(", ");
+            }
+            buffer.append(prefix).append("=");
+            buffer.append(property);
+        }
+    }
+
+    /**
+     * Used by init()
+     * @throws MojoExecutionException
+     */
+    private void genKeyStore()
+    throws MojoExecutionException
+    {
+        GenkeyMojo genKeystore = new GenkeyMojo();
+        genKeystore.setAlias( getAlias() );
+        genKeystore.setDname( getDname() );
+        genKeystore.setKeyalg( getKeyalg() );
+        genKeystore.setKeypass( getKeypass() );
+        genKeystore.setKeysize( getKeysize() );
+        genKeystore.setKeystore( getKeystore() );
+        genKeystore.setSigalg( getSigalg() );
+        genKeystore.setStorepass( getStorepass() );
+        genKeystore.setStoretype( getStoretype() );
+        genKeystore.setValidity( getValidity() );
+        genKeystore.setVerbose( verbose );
+        genKeystore.setWorkingDir( workDirectory );
+        genKeystore.setLog( log );
+    
+        genKeystore.execute();
+    }
+    
+    private void deleteKeyStore()
+    {
+        File keyStore = null;
+        if ( getKeystore() != null )
+        {
+            keyStore = new File( getKeystore() );
+        }
+        else
+        {
+            // FIXME decide if we really want this.
+            // keyStore = new File( System.getProperty( "user.home") + File.separator + ".keystore" );
+        }
+
+        if ( keyStore == null )
+        {
+            return;
+        }
+        if ( keyStore.exists() )
+        {
+            if ( keyStore.delete() )
+            {
+                log.debug( "deleted keystore from: " + keyStore.getAbsolutePath() );
+            }
+            else
+            {
+                log.warn( "Couldn't delete keystore from: " + keyStore.getAbsolutePath() );
+            }
+        }
+        else
+        {
+            log.debug( "Skipping deletion of non existing keystore: " + keyStore.getAbsolutePath() );
+        }
+    }
+}
Index: plugin/src/main/java/org/codehaus/mojo/webstart/AbstractJnlpMojo.java
===================================================================
--- plugin/src/main/java/org/codehaus/mojo/webstart/AbstractJnlpMojo.java	(revision 3560)
+++ plugin/src/main/java/org/codehaus/mojo/webstart/AbstractJnlpMojo.java	(working copy)
@@ -26,6 +26,7 @@
 import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.PluginManager;
 import org.apache.maven.plugin.jar.JarSignMojo;
 import org.apache.maven.project.MavenProject;
@@ -134,47 +135,13 @@
     /**
      * The Sign Config
      *
-     * @parameter
+     * @parameter implementation="${org.codehaus.mojo.webstart.JarSignMojoConfig}"
      */
     private SignConfig sign;
 
-    public static class KeystoreConfig
-    {
-        private boolean delete;
-
-        private boolean gen;
-
-        public boolean isDelete()
-        {
-            return delete;
-        }
-
-        public void setDelete( boolean delete )
-        {
-            this.delete = delete;
-        }
-
-        public boolean isGen()
-        {
-            return gen;
-        }
-
-        public void setGen( boolean gen )
-        {
-            this.gen = gen;
-        }
-    }
-
     /**
      * Xxx
      *
-     * @parameter
-     */
-    private KeystoreConfig keystore;
-
-    /**
-     * Xxx
-     *
      * @parameter default-value="false"
      */
     // private boolean usejnlpservlet;
@@ -435,15 +402,7 @@
 
             if ( sign != null )
             {
-
-                if ( keystore != null && keystore.isGen() )
-                {
-                    if ( keystore.isDelete() )
-                    {
-                        deleteKeyStore();
-                    }
-                    genKeyStore();
-                }
+                sign.init(getLog(), getWorkDirectory(), verbose);
                 
                 // not yet enabled
                 // removeExistingSignatures(workDirectory, updatedJarFileFilter);
@@ -860,60 +819,6 @@
         }
     }
 
-    private void deleteKeyStore()
-    {
-        File keyStore = null;
-        if ( sign.getKeystore() != null )
-        {
-            keyStore = new File( sign.getKeystore() );
-        }
-        else
-        {
-            // FIXME decide if we really want this.
-            // keyStore = new File( System.getProperty( "user.home") + File.separator + ".keystore" );
-        }
-
-        if ( keyStore == null )
-        {
-            return;
-        }
-        if ( keyStore.exists() )
-        {
-            if ( keyStore.delete() )
-            {
-                getLog().debug( "deleted keystore from: " + keyStore.getAbsolutePath() );
-            }
-            else
-            {
-                getLog().warn( "Couldn't delete keystore from: " + keyStore.getAbsolutePath() );
-            }
-        }
-        else
-        {
-            getLog().debug( "Skipping deletion of non existing keystore: " + keyStore.getAbsolutePath() );
-        }
-    }
-
-    private void genKeyStore()
-        throws MojoExecutionException
-    {
-        GenkeyMojo genKeystore = new GenkeyMojo();
-        genKeystore.setAlias( sign.getAlias() );
-        genKeystore.setDname( sign.getDname() );
-        genKeystore.setKeyalg( sign.getKeyalg() );
-        genKeystore.setKeypass( sign.getKeypass() );
-        genKeystore.setKeysize( sign.getKeysize() );
-        genKeystore.setKeystore( sign.getKeystore() );
-        genKeystore.setSigalg( sign.getSigalg() );
-        genKeystore.setStorepass( sign.getStorepass() );
-        genKeystore.setStoretype( sign.getStoretype() );
-        genKeystore.setValidity( sign.getValidity() );
-        genKeystore.setVerbose( this.verbose );
-        genKeystore.setWorkingDir( getWorkDirectory() );
-
-        genKeystore.execute();
-    }
-
     private File getWorkDirectory()
     {
         return workDirectory;
@@ -962,7 +867,7 @@
      * return the number of signed jars *
      */
     private int signJars( File directory, FileFilter fileFilter )
-        throws MojoExecutionException
+        throws MojoExecutionException, MojoFailureException
     {
 
         File[] jarFiles = directory.listFiles( fileFilter );
@@ -974,18 +879,7 @@
             return 0;
         }
 
-        JarSignMojo signJar = new JarSignMojo();
-        signJar.setAlias( sign.getAlias() );
-        signJar.setBasedir( basedir );
-        signJar.setKeypass( sign.getKeypass() );
-        signJar.setKeystore( sign.getKeystore() );
-        signJar.setLog( getLog() );
-        signJar.setSigFile( sign.getSigfile() );
-        signJar.setStorepass( sign.getStorepass() );
-        signJar.setType( sign.getStoretype() );
-        signJar.setVerbose( this.verbose );
-        signJar.setWorkingDir( getWorkDirectory() );
-        signJar.setVerify( sign.getVerify() );
+        JarSignerMojo signJar = sign.getJarSignerMojo();
 
         for ( int i = 0; i < jarFiles.length; i++ )
         {
Index: plugin/pom.xml
===================================================================
--- plugin/pom.xml	(revision 3560)
+++ plugin/pom.xml	(working copy)
@@ -40,6 +40,11 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.codehaus.mojo</groupId>
+      <artifactId>webstart-jarsigner-api</artifactId>
+      <version>${version}</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-project</artifactId>
       <version>2.0.1</version>

