You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2012/01/21 12:31:27 UTC
svn commit: r1234303 -
/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
Author: rfscholte
Date: Sat Jan 21 11:31:26 2012
New Revision: 1234303
URL: http://svn.apache.org/viewvc?rev=1234303&view=rev
Log:
format code, no changes
Modified:
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java?rev=1234303&r1=1234302&r2=1234303&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DependencyConvergence.java Sat Jan 21 11:31:26 2012
@@ -1,4 +1,5 @@
package org.apache.maven.plugins.enforcer;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -43,148 +44,183 @@ import org.codehaus.plexus.i18n.I18N;
/**
* @author <a href="mailto:rex@e-hoffman.org">Rex Hoffman</a>
*/
-public class DependencyConvergence implements EnforcerRule {
-
- private static Log log;
-
- private static I18N i18n;
-
- /**
- * Uses the {@link EnforcerRuleHelper} to populate the values of the {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
- * factory method. <br/>
- *
- * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do.
- *
- * @param helper
- * @return a Dependency Node which is the root of the project's dependency tree
- * @throws EnforcerRuleException
- */
- private DependencyNode getNode(EnforcerRuleHelper helper) throws EnforcerRuleException {
- try {
- MavenProject project = (MavenProject) helper.evaluate("${project}");
- DependencyTreeBuilder dependencyTreeBuilder = (DependencyTreeBuilder) helper.getComponent(DependencyTreeBuilder.class);
- ArtifactRepository repository = (ArtifactRepository)helper.evaluate("${localRepository}");
- ArtifactFactory factory = (ArtifactFactory)helper.getComponent(ArtifactFactory.class);
- ArtifactMetadataSource metadataSource = (ArtifactMetadataSource)helper.getComponent(ArtifactMetadataSource.class);
- ArtifactCollector collector = (ArtifactCollector)helper.getComponent(ArtifactCollector.class);
- ArtifactFilter filter = null; //we need to evaluate all scopes
- DependencyNode node = dependencyTreeBuilder.buildDependencyTree(project, repository, factory, metadataSource, filter, collector);
- return node;
- } catch (ExpressionEvaluationException e) {
- throw new EnforcerRuleException("Unable to lookup an expression " + e.getLocalizedMessage(), e);
- } catch (ComponentLookupException e){
- throw new EnforcerRuleException("Unable to lookup a component " + e.getLocalizedMessage(), e);
- } catch (DependencyTreeBuilderException e){
- throw new EnforcerRuleException("Could not build dependency tree " + e.getLocalizedMessage(), e);
- }
- }
-
- public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
- if (log == null){
- log = helper.getLog();
- }
- try {
- if (i18n == null){
- i18n = (I18N) helper.getComponent(I18N.class);
- }
- DependencyNode node = getNode(helper);
- MavenProject project = (MavenProject) helper.evaluate("${project}");
- DependencyVersionMap visitor = new DependencyVersionMap(project.getArtifact().isRelease(), log);
- node.accept(visitor);
- List<CharSequence> errorMsgs = new ArrayList<CharSequence>();
- errorMsgs.addAll(getConvergenceErrorMsgs(visitor.getConflictedVersionNumbers()));
- for (CharSequence errorMsg : errorMsgs) {
- log.error(errorMsg);
- }
- if (errorMsgs.size() > 0) {
- throw new EnforcerRuleException("Failed while enforcing releasability the error(s) are " + errorMsgs);
- }
- } catch (ExpressionEvaluationException e) {
- throw new EnforcerRuleException("Unable to lookup an expression " + e.getLocalizedMessage(), e);
- } catch (ComponentLookupException e){
- throw new EnforcerRuleException("Unable to lookup a component " + e.getLocalizedMessage(), e);
- } catch (Exception e){
- throw new EnforcerRuleException(e.getLocalizedMessage(), e);
- }
- }
-
- private String getFullArtifactName(Artifact artifact){
- return artifact.getGroupId() + ":" + artifact.getArtifactId() +":"+ artifact.getVersion();
- }
-
- private StringBuilder buildTreeString(DependencyNode node) {
- List<String> loc = new ArrayList<String>();
- DependencyNode currentNode = node;
- while (currentNode != null) {
- loc.add(getFullArtifactName(currentNode.getArtifact()));
- currentNode = currentNode.getParent();
- }
- Collections.reverse(loc);
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < loc.size(); i++) {
- for (int j = 0; j < i; j++){
- builder.append(" ");
- }
- builder.append("+-"+loc.get(i));
- builder.append("\n");
- }
- return builder;
- }
-
- private List<String> getConvergenceErrorMsgs(List<List<DependencyNode>> errors) {
- List<String> errorMsgs = new ArrayList<String>();
- for (List<DependencyNode> nodeList : errors){
- errorMsgs.add(buildConvergenceErrorMsg(nodeList));
- }
- return errorMsgs;
- }
-
- private String buildConvergenceErrorMsg(List<DependencyNode> nodeList){
- StringBuilder builder = new StringBuilder();
- builder.append("\nDependency convergence error for "+getFullArtifactName(nodeList.get(0).getArtifact())+" paths to dependency are:\n");
- if (nodeList.size() > 0){
- builder.append(buildTreeString(nodeList.get(0)));
- }
- for (DependencyNode node: nodeList.subList(1,nodeList.size())){
- builder.append("and\n");
- builder.append(buildTreeString(node));
- }
- return builder.toString();
- }
-
- /**
- * If your rule is cacheable, you must return a unique id when parameters or
- * conditions change that would cause the result to be different. Multiple
- * cached results are stored based on their id.
- *
- * The easiest way to do this is to return a hash computed from the values of
- * your parameters.
- *
- * If your rule is not cacheable, then the result here is not important, you
- * may return anything.
- */
- public String getCacheId() {
- return "";
- }
-
- /**
- * This tells the system if the results are cacheable at all. Keep in mind
- * that during forked builds and other things, a given rule may be executed
- * more than once for the same project. This means that even things that
- * change from project to project may still be cacheable in certain instances.
- */
- public boolean isCacheable() {
- return false;
- }
-
- /**
- * If the rule is cacheable and the same id is found in the cache, the stored
- * results are passed to this method to allow double checking of the results.
- * Most of the time this can be done by generating unique ids, but sometimes
- * the results of objects returned by the helper need to be queried. You may
- * for example, store certain objects in your rule and then query them later.
- */
- public boolean isResultValid(EnforcerRule arg0) {
- return false;
- }
-}
+public class DependencyConvergence
+ implements EnforcerRule
+{
+
+ private static Log log;
+
+ private static I18N i18n;
+
+ /**
+ * Uses the {@link EnforcerRuleHelper} to populate the values of the
+ * {@link DependencyTreeBuilder#buildDependencyTree(MavenProject, ArtifactRepository, ArtifactFactory, ArtifactMetadataSource, ArtifactFilter, ArtifactCollector)}
+ * factory method. <br/>
+ * This method simply exists to hide all the ugly lookup that the {@link EnforcerRuleHelper} has to do.
+ *
+ * @param helper
+ * @return a Dependency Node which is the root of the project's dependency tree
+ * @throws EnforcerRuleException
+ */
+ private DependencyNode getNode( EnforcerRuleHelper helper )
+ throws EnforcerRuleException
+ {
+ try
+ {
+ MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+ DependencyTreeBuilder dependencyTreeBuilder =
+ (DependencyTreeBuilder) helper.getComponent( DependencyTreeBuilder.class );
+ ArtifactRepository repository = (ArtifactRepository) helper.evaluate( "${localRepository}" );
+ ArtifactFactory factory = (ArtifactFactory) helper.getComponent( ArtifactFactory.class );
+ ArtifactMetadataSource metadataSource =
+ (ArtifactMetadataSource) helper.getComponent( ArtifactMetadataSource.class );
+ ArtifactCollector collector = (ArtifactCollector) helper.getComponent( ArtifactCollector.class );
+ ArtifactFilter filter = null; // we need to evaluate all scopes
+ DependencyNode node =
+ dependencyTreeBuilder.buildDependencyTree( project, repository, factory, metadataSource, filter,
+ collector );
+ return node;
+ }
+ catch ( ExpressionEvaluationException e )
+ {
+ throw new EnforcerRuleException( "Unable to lookup an expression " + e.getLocalizedMessage(), e );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e );
+ }
+ catch ( DependencyTreeBuilderException e )
+ {
+ throw new EnforcerRuleException( "Could not build dependency tree " + e.getLocalizedMessage(), e );
+ }
+ }
+
+ public void execute( EnforcerRuleHelper helper )
+ throws EnforcerRuleException
+ {
+ if ( log == null )
+ {
+ log = helper.getLog();
+ }
+ try
+ {
+ if ( i18n == null )
+ {
+ i18n = (I18N) helper.getComponent( I18N.class );
+ }
+ DependencyNode node = getNode( helper );
+ MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+ DependencyVersionMap visitor = new DependencyVersionMap( project.getArtifact().isRelease(), log );
+ node.accept( visitor );
+ List<CharSequence> errorMsgs = new ArrayList<CharSequence>();
+ errorMsgs.addAll( getConvergenceErrorMsgs( visitor.getConflictedVersionNumbers() ) );
+ for ( CharSequence errorMsg : errorMsgs )
+ {
+ log.error( errorMsg );
+ }
+ if ( errorMsgs.size() > 0 )
+ {
+ throw new EnforcerRuleException( "Failed while enforcing releasability the error(s) are " + errorMsgs );
+ }
+ }
+ catch ( ExpressionEvaluationException e )
+ {
+ throw new EnforcerRuleException( "Unable to lookup an expression " + e.getLocalizedMessage(), e );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new EnforcerRuleException( "Unable to lookup a component " + e.getLocalizedMessage(), e );
+ }
+ catch ( Exception e )
+ {
+ throw new EnforcerRuleException( e.getLocalizedMessage(), e );
+ }
+ }
+
+ private String getFullArtifactName( Artifact artifact )
+ {
+ return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion();
+ }
+
+ private StringBuilder buildTreeString( DependencyNode node )
+ {
+ List<String> loc = new ArrayList<String>();
+ DependencyNode currentNode = node;
+ while ( currentNode != null )
+ {
+ loc.add( getFullArtifactName( currentNode.getArtifact() ) );
+ currentNode = currentNode.getParent();
+ }
+ Collections.reverse( loc );
+ StringBuilder builder = new StringBuilder();
+ for ( int i = 0; i < loc.size(); i++ )
+ {
+ for ( int j = 0; j < i; j++ )
+ {
+ builder.append( " " );
+ }
+ builder.append( "+-" + loc.get( i ) );
+ builder.append( "\n" );
+ }
+ return builder;
+ }
+
+ private List<String> getConvergenceErrorMsgs( List<List<DependencyNode>> errors )
+ {
+ List<String> errorMsgs = new ArrayList<String>();
+ for ( List<DependencyNode> nodeList : errors )
+ {
+ errorMsgs.add( buildConvergenceErrorMsg( nodeList ) );
+ }
+ return errorMsgs;
+ }
+
+ private String buildConvergenceErrorMsg( List<DependencyNode> nodeList )
+ {
+ StringBuilder builder = new StringBuilder();
+ builder.append( "\nDependency convergence error for " + getFullArtifactName( nodeList.get( 0 ).getArtifact() )
+ + " paths to dependency are:\n" );
+ if ( nodeList.size() > 0 )
+ {
+ builder.append( buildTreeString( nodeList.get( 0 ) ) );
+ }
+ for ( DependencyNode node : nodeList.subList( 1, nodeList.size() ) )
+ {
+ builder.append( "and\n" );
+ builder.append( buildTreeString( node ) );
+ }
+ return builder.toString();
+ }
+
+ /**
+ * If your rule is cacheable, you must return a unique id when parameters or conditions change that would cause the
+ * result to be different. Multiple cached results are stored based on their id. The easiest way to do this is to
+ * return a hash computed from the values of your parameters. If your rule is not cacheable, then the result here is
+ * not important, you may return anything.
+ */
+ public String getCacheId()
+ {
+ return "";
+ }
+
+ /**
+ * This tells the system if the results are cacheable at all. Keep in mind that during forked builds and other
+ * things, a given rule may be executed more than once for the same project. This means that even things that change
+ * from project to project may still be cacheable in certain instances.
+ */
+ public boolean isCacheable()
+ {
+ return false;
+ }
+
+ /**
+ * If the rule is cacheable and the same id is found in the cache, the stored results are passed to this method to
+ * allow double checking of the results. Most of the time this can be done by generating unique ids, but sometimes
+ * the results of objects returned by the helper need to be queried. You may for example, store certain objects in
+ * your rule and then query them later.
+ */
+ public boolean isResultValid( EnforcerRule arg0 )
+ {
+ return false;
+ }
+}
\ No newline at end of file