You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ke...@apache.org on 2006/04/11 16:47:51 UTC

svn commit: r393237 - in /maven/plugins/trunk/maven-jar-plugin/src: main/java/org/apache/maven/plugin/jar/JarSignMojo.java site/apt/howto.apt test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java

Author: kenney
Date: Tue Apr 11 07:47:48 2006
New Revision: 393237

URL: http://svn.apache.org/viewcvs?rev=393237&view=rev
Log:
PR: MJAR-24
Submitted by: Jerome Lacoste
Patch by: Richard Allen <ri...@gtri.gatech.edu>, modified by Jerome and /me

Don't sign already signed jars; allow for in-place jar signing.

Modifications to the patch: code formatting.

Modified:
    maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java
    maven/plugins/trunk/maven-jar-plugin/src/site/apt/howto.apt
    maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java

Modified: maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java?rev=393237&r1=393236&r2=393237&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java (original)
+++ maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java Tue Apr 11 07:47:48 2006
@@ -82,7 +82,7 @@
     /**
      * Path of the jar to sign. When specified, the finalName is ignored.
      *
-     * @parameter alias="jarpath"
+     * @parameter alias="jarpath" default-value="${project.build.directory}/${project.build.finalName}.${project.packaging}"
      */
     private File jarPath;
 
@@ -118,8 +118,9 @@
     /**
      * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jarsigner.html#Options">options</a>.
      *
-     * @parameter expression="${signedjar}" default-value="${project.build.directory}/signed/${project.build.finalName}.jar"
-     * @required
+     * Not specifying this argument will sign the jar in-place (your original jar is going to be overwritten).
+     *
+     * @parameter expression="${signedjar}"
      */
     private File signedjar;
 
@@ -185,19 +186,41 @@
             getLog().info( "Skipping JAR signing for file: " + getJarFile().getAbsolutePath() );
         }
 
+        JarSignVerifyMojo verifyMojo = createJarSignVerifyMojo();
+
+        File signedJarFile = signedjar != null ? signedjar : getJarFile();
+
+        if ( signedJarFile.exists() )
+        {
+            verifyMojo.setWorkingDir( workingDirectory );
+            verifyMojo.setBasedir( basedir );
+            verifyMojo.setJarPath( signedJarFile );
+            verifyMojo.setVerbose( verbose );
+            verifyMojo.setErrorWhenNotSigned( false );
+            verifyMojo.execute();
+        }
+
+        if ( verifyMojo.isSigned() )
+        {
+            getLog().info( "JAR " + getJarFile().getAbsoluteFile() + " is already signed. Skipping.");
+            return;
+        }
+
         signJar();
 
-        if ( verify )
+        if ( this.verify )
         {
-            JarSignVerifyMojo verify = new JarSignVerifyMojo();
-            verify.setWorkingDir( workingDirectory );
-            verify.setBasedir( basedir );
-            verify.setJarPath( getJarFile() );
-            verify.setVerbose( verbose );
-            verify.execute();
+            verifyMojo.setErrorWhenNotSigned( true );
+            verifyMojo.execute();
         }
     }
 
+    protected JarSignVerifyMojo createJarSignVerifyMojo()
+    {
+        return new JarSignVerifyMojo();
+    }
+
+
     File getJarFile()
     {
         if ( jarPath != null )
@@ -227,7 +250,7 @@
         addArgIfNotEmpty( arguments, "-keystore", this.keystore );
         addArgIfNotEmpty( arguments, "-storepass", this.storepass );
         addArgIfNotEmpty( arguments, "-keypass", this.keypass );
-        addArgIfNotEmpty( arguments, "-signedjar", this.signedjar.getPath() );
+        addArgIfNotEmpty( arguments, "-signedjar", this.signedjar );
         addArgIfNotEmpty( arguments, "-storetype", this.type );
         addArgIfNotEmpty( arguments, "-sigfile", this.sigfile );
 
@@ -244,9 +267,14 @@
 
         createParentDirIfNecessary( signedjar );
 
+        if ( signedjar == null )
+        {
+            getLog().debug( "Signing JAR in-place (overwritting original JAR)." );
+        }
+
         getLog().debug( "Executing: " + commandLine );
 
-        // jarsigner may ask for some input if the parameters are missing or incorrect. 
+        // jarsigner may ask for some input if the parameters are missing or incorrect.
         // This should take care of it and make it fail gracefully
         final InputStream inputStream = new InputStream()
         {
@@ -286,6 +314,12 @@
             throw new MojoExecutionException( "command execution failed", e );
         }
 
+        // signed in place, no need to attach
+        if ( signedjar == null )
+        {
+            return;
+        }
+
         if ( classifier != null )
         {
             projectHelper.attachArtifact( project, "jar", classifier, signedjar );
@@ -465,7 +499,8 @@
 
     // hiding for now - I don't think this is required to be seen
     /*
-     public void setFinalName( String finalName ) {
+     public void setFinalName( String finalName )
+     {
      this.finalName = finalName;
      }
      */

Modified: maven/plugins/trunk/maven-jar-plugin/src/site/apt/howto.apt
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-jar-plugin/src/site/apt/howto.apt?rev=393237&r1=393236&r2=393237&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jar-plugin/src/site/apt/howto.apt (original)
+++ maven/plugins/trunk/maven-jar-plugin/src/site/apt/howto.apt Tue Apr 11 07:47:48 2006
@@ -92,6 +92,9 @@
 </project>
 -------------------
 
+  If you do not specify the signedjar file, your jar will be signed in-place.
+  If you do specify it, the program will attempt to create the resulting containing directory.
+
 * How to use jar:sign specifying parameters on the command line
 
 -------------------

Modified: maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java?rev=393237&r1=393236&r2=393237&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java (original)
+++ maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/JarSignMojoTest.java Tue Apr 11 07:47:48 2006
@@ -57,6 +57,8 @@
 
         public Map systemProperties = new HashMap();
 
+        public JarSignVerifyMojo verifyMojo = new JarSignVerifyMojo();
+
         protected int executeCommandLine( Commandline commandLine, InputStream inputStream, StreamConsumer stream1,
                                           StreamConsumer stream2 )
             throws CommandLineException
@@ -69,6 +71,11 @@
             return executeResult;
         }
 
+        protected JarSignVerifyMojo createJarSignVerifyMojo()
+        {
+            return verifyMojo;
+        }
+
         protected String getSystemProperty( String key )
         {
             return (String) systemProperties.get( key );
@@ -96,6 +103,8 @@
         mockArtifact.setType( "jar" );
         project.setArtifact( mockArtifact );
         mojo.setProject( project );
+
+        new File(getNullJar()).delete();
     }
 
     public void tearDown()
@@ -117,6 +126,44 @@
     }
 
     /**
+     * We shouldn't sign the jar twice.
+     * On the second run, we simulated a created and signed jar.
+     */
+    public void testRunTwice()
+        throws MojoExecutionException, IOException
+    {
+        mojo.execute();
+
+        class MyJarSignVerifyMojo
+            extends JarSignVerifyMojo
+        {
+            int nbExecutions;
+
+            public void execute()
+                throws MojoExecutionException
+            {
+                nbExecutions++;
+            }
+
+            public boolean isSigned()
+            {
+                return true;
+            }
+        }
+
+        mojo.verifyMojo = new MyJarSignVerifyMojo();
+
+        new File(getNullJar()).createNewFile();
+
+        mojo.execute();
+
+        String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar",
+            "/tmp/signed/file-version.jar", getNullJar(), "alias"};
+
+        checkMojo( expectedArguments );
+    }
+
+    /**
      */
     public void testRunFailure()
     {
@@ -179,12 +226,7 @@
         assertEquals( 1, mojo.commandLines.size() );
         Commandline commandline = (Commandline) mojo.commandLines.get( 0 );
         String[] arguments = commandline.getArguments();
-        // isn't there an assertEquals for arrays?
-        /*
-         for (int i = 0; i < arguments.length; i++ ) {
-         System.out.println( arguments[ i ] );
-         }
-         */
+
         assertEquals( "Differing number of arguments", expectedCommandLineArguments.length, arguments.length );
         for ( int i = 0; i < arguments.length; i++ )
         {