Author: brett Date: Thu Jan 19 18:45:46 2006 New Revision: 370706 URL: http://svn.apache.org/viewcvs?rev=370706&view=rev Log: update the jar signing mojo so that the signed jar can be installed
Added: maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/MockArtifact.java (with props) Modified: maven/plugins/trunk/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarSignMojo.java 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=370706&r1=370705&r2=370706&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 Thu Jan 19 18:45:46 2006 @@ -20,6 +20,8 @@ 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.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.cli.CommandLineException; import org.codehaus.plexus.util.cli.CommandLineUtils; @@ -73,7 +75,6 @@ * Path of the jar to sign. When specified, the finalName is ignored. * * @parameter alias="jarpath" - * @required */ private File jarPath; @@ -111,9 +112,8 @@ * * @parameter expression="${signedjar}" default-value="${project.build.directory}/signed/${project.build.finalName}.jar" * @required - * @todo make a File? */ - private String signedjar; + private File signedjar; /** * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jarsigner.html#Options">options</a>. @@ -132,7 +132,7 @@ /** * Automatically verify a jar after signing it. - * + * <p/> * See <a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/jarsigner.html#Options">options</a>. * * @parameter expression="${verify}" default-value="false" @@ -147,31 +147,59 @@ */ private boolean verbose; + /** + * @component + */ + private MavenProjectHelper projectHelper; + + /** + * The maven project. + * + * @parameter expression="${project}" + * @required + * @readonly + */ + private MavenProject project; + + /** + * Classifier to use for the generated artifact. If not specified, the generated artifact becomes the primary artifact. + * + * @parameter expression="${classifier}" + */ + private String classifier; + public void execute() throws MojoExecutionException { signJar(); - if ( verify ) { - JarSignVerifyMojo verify = new JarSignVerifyMojo(); - verify.setWorkingDir( workingDirectory ); - verify.setBasedir( basedir ); - verify.setJarPath( getJarFile() ); - verify.setVerbose( verbose ); - verify.execute(); + if ( verify ) + { + JarSignVerifyMojo verify = new JarSignVerifyMojo(); + verify.setWorkingDir( workingDirectory ); + verify.setBasedir( basedir ); + verify.setJarPath( getJarFile() ); + verify.setVerbose( verbose ); + verify.execute(); } } - File getJarFile() { - if ( jarPath != null ) { + File getJarFile() + { + if ( jarPath != null ) + { return jarPath; - } else { - return AbstractJarMojo.getJarFile( basedir, finalName, null); + } + else + { + return AbstractJarMojo.getJarFile( basedir, finalName, null ); } } - void signJar() throws MojoExecutionException { + void signJar() + throws MojoExecutionException + { List arguments = new ArrayList(); Commandline commandLine = new Commandline(); @@ -186,7 +214,7 @@ addArgIfNotEmpty( arguments, "-keystore", this.keystore ); addArgIfNotEmpty( arguments, "-storepass", this.storepass ); addArgIfNotEmpty( arguments, "-keypass", this.keypass ); - addArgIfNotEmpty( arguments, "-signedjar", this.signedjar ); + addArgIfNotEmpty( arguments, "-signedjar", this.signedjar.getPath() ); addArgIfNotEmpty( arguments, "-storetype", this.type ); addArgIfNotEmpty( arguments, "-sigfile", this.sigfile ); @@ -244,13 +272,22 @@ { throw new MojoExecutionException( "command execution failed", e ); } + + if ( classifier != null ) + { + projectHelper.attachArtifact( project, "jar", classifier, signedjar ); + } + else + { + project.getArtifact().setFile( signedjar ); + } } - private void createParentDirIfNecessary( final String file ) + private void createParentDirIfNecessary( File file ) { if ( file != null ) { - final File fileDir = new File( file ).getParentFile(); + File fileDir = file.getParentFile(); if ( fileDir != null ) { // not a relative path @@ -310,8 +347,8 @@ * conditionally based on the given flag. * * @param arguments - * @param b the flag which controls if the argument is added or not. - * @param value the argument value to be added. + * @param b the flag which controls if the argument is added or not. + * @param value the argument value to be added. */ private void addArgIf( List arguments, boolean b, String value ) { @@ -324,12 +361,12 @@ /** * Convenience method to add an argument to the <code>command line</code> * if the the value is not null or empty. - * <p> + * <p/> * Moreover, the value could be comma separated. * * @param arguments - * @param key the argument name. - * @param value the argument value to be added. + * @param key the argument name. + * @param value the argument value to be added. * @see #addArgIfNotEmpty(java.util.List,String,String,boolean) */ private void addArgIfNotEmpty( List arguments, String key, String value ) @@ -340,12 +377,12 @@ /** * Convenience method to add an argument to the <code>command line</code> * if the the value is not null or empty. - * <p> + * <p/> * Moreover, the value could be comma separated. * * @param arguments - * @param key the argument name. - * @param value the argument value to be added. + * @param key the argument name. + * @param value the argument value to be added. * @param repeatKey repeat or not the key in the command line */ private void addArgIfNotEmpty( List arguments, String key, String value, boolean repeatKey ) @@ -377,7 +414,7 @@ // protected int executeCommandLine( Commandline commandLine, InputStream inputStream, StreamConsumer stream1, - StreamConsumer stream2 ) + StreamConsumer stream2 ) throws CommandLineException { return CommandLineUtils.executeCommandLine( commandLine, inputStream, stream1, stream2 ); @@ -403,7 +440,7 @@ this.keypass = keypass; } - public void setSignedJar( String signedjar ) + public void setSignedJar( File signedjar ) { this.signedjar = signedjar; } @@ -445,7 +482,13 @@ this.verbose = verbose; } - public void setVerify( boolean verify ) { + public void setProject( MavenProject project ) + { + this.project = project; + } + + public void setVerify( boolean verify ) + { this.verify = verify; } } 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=370706&r1=370705&r2=370706&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 Thu Jan 19 18:45:46 2006 @@ -17,8 +17,9 @@ */ import junit.framework.TestCase; - +import org.apache.maven.model.Model; import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.cli.CommandLineException; import org.codehaus.plexus.util.cli.Commandline; import org.codehaus.plexus.util.cli.StreamConsumer; @@ -36,7 +37,7 @@ * Really running the command would mean checking the results, which is too painful and not really a unit test. * It would probably require to 'jarsigner -verify' the resulting signed jar and I believe it would make the code * too complex with very few benefits. - * + * * @author Jerome Lacoste <[EMAIL PROTECTED]> * @version $Id$ */ @@ -57,7 +58,7 @@ public Map systemProperties = new HashMap(); protected int executeCommandLine( Commandline commandLine, InputStream inputStream, StreamConsumer stream1, - StreamConsumer stream2 ) + StreamConsumer stream2 ) throws CommandLineException { commandLines.add( commandLine ); @@ -83,10 +84,18 @@ File basedir = new File( System.getProperty( "java.io.tmpdir" ) ); mojo.setBasedir( basedir ); mojo.setWorkingDir( basedir ); - mojo.setSignedJar( "/tmp/signed/file-version.jar" ); + mojo.setSignedJar( new File( "/tmp/signed/file-version.jar" ) ); mojo.setAlias( "alias" ); mojo.setKeystore( "/tmp/keystore" ); mojo.setKeypass( "secretpassword" ); + MavenProject project = new MavenProject( new Model() ); + MockArtifact mockArtifact = new MockArtifact(); + mockArtifact.setGroupId( "test" ); + mockArtifact.setArtifactId( "test" ); + mockArtifact.setVersion( "1.0" ); + mockArtifact.setType( "jar" ); + project.setArtifact( mockArtifact ); + mojo.setProject( project ); } public void tearDown() @@ -94,11 +103,6 @@ mojo = null; } - public void testPleaseMaven() - { - assertTrue( true ); - } - /** */ public void testRunOK() @@ -106,15 +110,8 @@ { mojo.execute(); - String[] expectedArguments = { - "-keystore", - "/tmp/keystore", - "-keypass", - "secretpassword", - "-signedjar", - "/tmp/signed/file-version.jar", - getNullJar(), - "alias" }; + String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar", + "/tmp/signed/file-version.jar", getNullJar(), "alias"}; checkMojo( expectedArguments ); } @@ -138,14 +135,8 @@ assertTrue( e.getMessage().startsWith( "Result of " ) ); } - String[] expectedArguments = { - "-keystore", - "/tmp/keystore", - "-keypass", - "secretpassword", - "-signedjar", - "/tmp/signed/file-version.jar", - getNullJar() }; + String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar", + "/tmp/signed/file-version.jar", getNullJar()}; checkMojo( expectedArguments ); } @@ -177,15 +168,8 @@ assertEquals( "command execution failed", e.getMessage() ); } - String[] expectedArguments = { - "-keystore", - "/tmp/keystore", - "-keypass", - "secretpassword", - "-signedjar", - "/tmp/signed/file-version.jar", - getNullJar(), - "alias" }; + String[] expectedArguments = {"-keystore", "/tmp/keystore", "-keypass", "secretpassword", "-signedjar", + "/tmp/signed/file-version.jar", getNullJar(), "alias"}; checkMojo( expectedArguments ); } @@ -204,7 +188,7 @@ assertEquals( "Differing number of arguments", expectedCommandLineArguments.length, arguments.length ); for ( int i = 0; i < arguments.length; i++ ) { - assertEquals( expectedCommandLineArguments[i], arguments[i] ); + assertEquals( expectedCommandLineArguments[i].replace( '\\', '/' ), arguments[i].replace( '\\', '/' ) ); } } } Added: maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/MockArtifact.java URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/MockArtifact.java?rev=370706&view=auto ============================================================================== --- maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/MockArtifact.java (added) +++ maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/MockArtifact.java Thu Jan 19 18:45:46 2006 @@ -0,0 +1,310 @@ +package org.apache.maven.plugin.jar; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.handler.ArtifactHandler; +import org.apache.maven.artifact.metadata.ArtifactMetadata; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.filter.ArtifactFilter; +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.OverConstrainedVersionException; +import org.apache.maven.artifact.versioning.VersionRange; + +import java.io.File; +import java.util.Collection; +import java.util.List; + +/** + * @todo move to maven-artifact-test + */ +class MockArtifact + implements Artifact +{ + private String groupId; + + private String artifactId; + + private String version; + + private File file; + + private String scope; + + private String type; + + private String classifier; + + private String baseVersion; + + public String getGroupId() + { + return groupId; + } + + public String getArtifactId() + { + return artifactId; + } + + public String getVersion() + { + return version; + } + + public void setVersion( String string ) + { + this.version = string; + } + + public String getScope() + { + return scope; + } + + public String getType() + { + return type; + } + + public String getClassifier() + { + return classifier; + } + + public boolean hasClassifier() + { + return classifier != null; + } + + public File getFile() + { + return file; + } + + public void setFile( File file ) + { + this.file = file; + } + + public String getBaseVersion() + { + return baseVersion; + } + + public void setBaseVersion( String string ) + { + this.baseVersion = string; + } + + public String getId() + { + // TODO + return null; + } + + public String getDependencyConflictId() + { + // TODO + return null; + } + + public void addMetadata( ArtifactMetadata artifactMetadata ) + { + // TODO + } + + public Collection getMetadataList() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setRepository( ArtifactRepository artifactRepository ) + { + //To change body of implemented methods use File | Settings | File Templates. + // TODO + } + + public ArtifactRepository getRepository() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void updateVersion( String string, ArtifactRepository artifactRepository ) + { + //To change body of implemented methods use File | Settings | File Templates. + // TODO + } + + public String getDownloadUrl() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setDownloadUrl( String string ) + { + //To change body of implemented methods use File | Settings | File Templates. + // TODO + } + + public ArtifactFilter getDependencyFilter() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setDependencyFilter( ArtifactFilter artifactFilter ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public ArtifactHandler getArtifactHandler() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public List getDependencyTrail() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setDependencyTrail( List list ) + { + //To change body of implemented methods use File | Settings | File Templates. + // TODO + } + + public void setScope( String string ) + { + //To change body of implemented methods use File | Settings | File Templates. + // TODO + } + + public VersionRange getVersionRange() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setVersionRange( VersionRange versionRange ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public void selectVersion( String string ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean isSnapshot() + { + // TODO + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setResolved( boolean b ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean isResolved() + { + // TODO + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setResolvedVersion( String string ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public void setArtifactHandler( ArtifactHandler artifactHandler ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean isRelease() + { + // TODO + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setRelease( boolean b ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public List getAvailableVersions() + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void setAvailableVersions( List list ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean isOptional() + { + return false; //To change body of implemented methods use File | Settings | File Templates. + // TODO + } + + public void setOptional( boolean b ) + { + // TODO + //To change body of implemented methods use File | Settings | File Templates. + } + + public ArtifactVersion getSelectedVersion() + throws OverConstrainedVersionException + { + // TODO + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public boolean isSelectedVersionKnown() + throws OverConstrainedVersionException + { + return false; //To change body of implemented methods use File | Settings | File Templates. + // TODO + } + + public void setGroupId( String groupId ) + { + this.groupId = groupId; + } + + public void setArtifactId( String artifactId ) + { + this.artifactId = artifactId; + } + + public void setType( String type ) + { + this.type = type; + } + + public void setClassifier( String classifier ) + { + this.classifier = classifier; + } + + public int compareTo( Object o ) + { + // TODO + return 0; //To change body of implemented methods use File | Settings | File Templates. + } +} Propchange: maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/MockArtifact.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-jar-plugin/src/test/java/org/apache/maven/plugin/jar/MockArtifact.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision