Author: stephenc Date: Wed Nov 4 08:22:50 2009 New Revision: 832677 URL: http://svn.apache.org/viewvc?rev=832677&view=rev Log: functional
Modified: maven/sandbox/trunk/maven/maven-plugin-enforcer/src/main/java/org/apache/maven/util/pluginenforcer/PluginEnforcingMavenLifecycleParticipant.java Modified: maven/sandbox/trunk/maven/maven-plugin-enforcer/src/main/java/org/apache/maven/util/pluginenforcer/PluginEnforcingMavenLifecycleParticipant.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/maven/maven-plugin-enforcer/src/main/java/org/apache/maven/util/pluginenforcer/PluginEnforcingMavenLifecycleParticipant.java?rev=832677&r1=832676&r2=832677&view=diff ============================================================================== --- maven/sandbox/trunk/maven/maven-plugin-enforcer/src/main/java/org/apache/maven/util/pluginenforcer/PluginEnforcingMavenLifecycleParticipant.java (original) +++ maven/sandbox/trunk/maven/maven-plugin-enforcer/src/main/java/org/apache/maven/util/pluginenforcer/PluginEnforcingMavenLifecycleParticipant.java Wed Nov 4 08:22:50 2009 @@ -20,10 +20,15 @@ import org.apache.maven.AbstractMavenLifecycleParticipant; import org.apache.maven.MavenExecutionException; +import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.ReportPlugin; +import org.apache.maven.project.MavenProject; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.util.StringUtils; /** * Enforces that a specific version of a plugin is used throughout a build. @@ -38,10 +43,98 @@ @Requirement private Logger logger; - - public void afterProjectsRead( MavenSession mavenSession ) + + public void afterProjectsRead( MavenSession session ) throws MavenExecutionException { - logger.info( "Hello " + mavenSession.getUserProperties().getProperty("name", "world!!!" )); + String config = session.getUserProperties().getProperty( "force.plugins" ); + if ( StringUtils.isEmpty( config ) ) + { + logger.info( "Plugin Enforcer: Nothing to do (i.e. -Dforce.plugins undefined)" ); + return; + } + logger.info( StringUtils.repeat( "-", 72 ) ); + logger.info( "Plugin Enforcer" ); + logger.info( StringUtils.repeat( "-", 72 ) ); + for ( String forcePlugin : config.split( "," ) ) + { + if ( forcePlugin.isEmpty() ) + { + continue; + } + String[] parts = forcePlugin.split( ":" ); + if ( parts.length < 2 || parts.length > 3 ) + { + logger.warn( "\"" + forcePlugin + "\" does not match the format [groupId:]artifactId:version" ); + continue; + } + String groupId = parts.length == 3 ? parts[0] : "org.apache.maven.plugins"; + String artifactId = parts[parts.length - 2]; + String version = parts[parts.length - 1]; + logger.info( "Forcing " + ArtifactUtils.versionlessKey( groupId, artifactId ) + " to " + version ); + logger.info( "" ); + for ( MavenProject project : session.getProjects() ) + { + String name = StringUtils.isEmpty( project.getName() ) ? + ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ) + ":" + + project.getVersion() : project.getName(); + boolean projectIdentified = false; + for ( Plugin plugin : project.getPluginManagement().getPlugins() ) + { + if ( StringUtils.equals( groupId, plugin.getGroupId() ) && StringUtils.equals( artifactId, + plugin.getArtifactId() ) ) + { + if ( !projectIdentified ) + { + logger.info( "Project: " + name ); + projectIdentified = true; + } + logger.info( + "Plugin Management: replacing version " + plugin.getVersion() + " with " + version ); + plugin.setVersion( version ); + } + } + for ( Plugin plugin : project.getBuildPlugins() ) + { + if ( StringUtils.equals( groupId, plugin.getGroupId() ) && StringUtils.equals( artifactId, + plugin.getArtifactId() ) ) + { + if ( !projectIdentified ) + { + logger.info( "Project: " + name ); + projectIdentified = true; + } + logger.info( "Build Plugins: replacing version " + plugin.getVersion() + " with " + version ); + plugin.setVersion( version ); + } + } + // AFAIK this should be unnecessary, but just to be safe + for ( ReportPlugin plugin : project.getReportPlugins() ) + { + if ( StringUtils.equals( groupId, plugin.getGroupId() ) && StringUtils.equals( artifactId, + plugin.getArtifactId() ) ) + { + if ( !projectIdentified ) + { + logger.info( "Project: " + name ); + projectIdentified = true; + } + logger.info( "Report Plugins: replacing version " + plugin.getVersion() + " with " + version ); + plugin.setVersion( version ); + } + } + if ( projectIdentified ) + { + logger.info( "" ); + } + else + { + logger.warn( "No replacements Project: " + name ); + + logger.info( "" ); + } + } + } + } }