You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2009/04/08 06:11:13 UTC
svn commit: r762820 - in /maven/mercury/trunk:
mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/
mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/
mercury-md/mercury-md-sat/src/main/java/org/apache/maven/merc...
Author: ogusakov
Date: Tue Apr 7 15:29:44 2009
New Revision: 762820
URL: http://svn.apache.org/viewvc?rev=762820&view=rev
Log:
[MERCURY-109] - allowed optional circular dependencies
Added:
maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java (with props)
maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java (with props)
Modified:
maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java
maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java
maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java
maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties
maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java
Modified: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java (original)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/Configurable.java Tue Apr 7 15:29:44 2009
@@ -18,9 +18,11 @@
*/
package org.apache.maven.mercury.artifact.api;
+import java.util.Map;
+
/**
* provides a way to configure an object instance, if that object supports the idea
- *
+ *
* @author Oleg Gusakov
* @version $Id$
*/
@@ -29,9 +31,10 @@
/**
* configure this instance
- *
+ *
* @param name of the configurable property
* @param val configuration value
*/
- public void setOption( String name, String val );
+ public void setOption( String name, String val )
+ throws ConfigurationException;
}
Added: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java?rev=762820&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java (added)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java Tue Apr 7 15:29:44 2009
@@ -0,0 +1,26 @@
+package org.apache.maven.mercury.artifact.api;
+
+public class ConfigurationException
+ extends Exception
+{
+
+ public ConfigurationException()
+ {
+ }
+
+ public ConfigurationException( String message )
+ {
+ super( message );
+ }
+
+ public ConfigurationException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public ConfigurationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationException.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java?rev=762820&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java (added)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java Tue Apr 7 15:29:44 2009
@@ -0,0 +1,42 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+*/
+
+package org.apache.maven.mercury.artifact.api;
+
+import java.util.Map;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class ConfigurationUtil
+{
+ public static void configure( Configurable impl, Map<String,String> config )
+ throws ConfigurationException
+ {
+ if( impl == null || config == null )
+ return;
+
+ for( Map.Entry<String, String> e : config.entrySet() )
+ impl.setOption( e.getKey(), e.getValue() );
+ }
+}
Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/api/ConfigurationUtil.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java (original)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/MavenVersionRange.java Tue Apr 7 15:29:44 2009
@@ -266,7 +266,7 @@
_osgiVersion = Boolean.parseBoolean( System.getProperty( val, SYSTEM_PARAMETER_OSGI_VERSION_DEFAULT ) );
}
}
-
+
public boolean isSingleton()
{
return _singleton;
Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilder.java Tue Apr 7 15:29:44 2009
@@ -26,6 +26,7 @@
import org.apache.maven.mercury.artifact.ArtifactQueryList;
import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
import org.apache.maven.mercury.artifact.MetadataTreeNode;
+import org.apache.maven.mercury.artifact.api.Configurable;
import org.apache.maven.mercury.event.MercuryEventListener;
/**
@@ -36,9 +37,12 @@
*
*/
public interface DependencyBuilder
+extends Configurable
{
public static final String TREE_BUILD_EVENT = "tree.build";
public static final String TREE_NODE_BUILD_EVENT = "tree.node.build";
+
+ public static final String SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES = "mercury.circular.allow";
//------------------------------------------------------------------------
/**
* build the tree, using the repositories specified in the
Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyBuilderFactory.java Tue Apr 7 15:29:44 2009
@@ -25,6 +25,9 @@
import org.apache.maven.mercury.artifact.MetadataTreeNode;
import org.apache.maven.mercury.artifact.api.ArtifactListProcessor;
+import org.apache.maven.mercury.artifact.api.Configurable;
+import org.apache.maven.mercury.artifact.api.ConfigurationException;
+import org.apache.maven.mercury.artifact.api.ConfigurationUtil;
import org.apache.maven.mercury.repository.api.Repository;
import org.apache.maven.mercury.repository.api.RepositoryException;
import org.codehaus.plexus.lang.DefaultLanguage;
@@ -62,8 +65,34 @@
)
throws RepositoryException
{
+ return create( dependencyModel, repositories, null, null, null, null );
+ }
+
+ public static final DependencyBuilder create(
+ String dependencyModel
+ , Collection<Repository> repositories
+ , Collection<MetadataTreeArtifactFilter> filters
+ , List<Comparator<MetadataTreeNode>> comparators
+ , Map<String,ArtifactListProcessor> processors
+ , Map<String,String> config
+ )
+ throws RepositoryException
+ {
if( JAVA_DEPENDENCY_MODEL.equals( dependencyModel ) )
- return new DependencyTreeBuilder( repositories, filters, comparators, processors );
+ {
+ DependencyBuilder db = new DependencyTreeBuilder( repositories, filters, comparators, processors );
+
+ try
+ {
+ ConfigurationUtil.configure( db, config );
+ }
+ catch ( ConfigurationException e )
+ {
+ throw new RepositoryException( e );
+ }
+
+ return db;
+ }
throw new IllegalArgumentException( LANG.getMessage( "dependency.model.not.implemented", dependencyModel ) );
}
Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Tue Apr 7 15:29:44 2009
@@ -32,6 +32,7 @@
import org.apache.maven.mercury.artifact.ArtifactScopeEnum;
import org.apache.maven.mercury.artifact.MetadataTreeNode;
import org.apache.maven.mercury.artifact.api.ArtifactListProcessor;
+import org.apache.maven.mercury.artifact.api.ConfigurationException;
import org.apache.maven.mercury.artifact.version.VersionException;
import org.apache.maven.mercury.event.EventGenerator;
import org.apache.maven.mercury.event.EventManager;
@@ -70,7 +71,7 @@
private static final boolean _dumpDepTree = _depTreeDumpFileName != null;
private static final DependencyTreeDumper _dumper = _dumpDepTree ? new DependencyTreeDumper(_depTreeDumpFileName ) : null;
-
+
private static final IMercuryLogger LOG = MercuryLoggerManager.getLogger( DependencyTreeBuilder.class );
private Collection<MetadataTreeArtifactFilter> _filters;
@@ -87,6 +88,8 @@
private boolean _buildIndividualTrees = true;
+ private boolean _allowCircularDependencies = Boolean.parseBoolean( System.getProperty( SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, "false" ) );
+
class TruckLoad
{
List<ArtifactMetadata> cp;
@@ -358,7 +361,21 @@
try
{
- checkForCircularDependency( nodeMD, parent );
+ try
+ {
+ checkForCircularDependency( nodeMD, parent );
+ }
+ catch ( MetadataTreeCircularDependencyException e )
+ {
+ if( _allowCircularDependencies )
+ {
+ String line = LANG.getMessage( "attention.line" );
+ LOG.info( line + e.getMessage() + line );
+ return null;
+ }
+ else
+ throw e;
+ }
ArtifactMetadata mr;
@@ -431,7 +448,8 @@
}
MetadataTreeNode kid = createNode( ver, node, md, globalScope );
- node.addChild( kid );
+ if( kid != null )
+ node.addChild( kid );
noVersions = false;
@@ -658,4 +676,11 @@
if( _reader != null )
_reader.close();
}
+
+ public void setOption( String name, String val )
+ throws ConfigurationException
+ {
+ if( SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES.equals( name ) )
+ _allowCircularDependencies = Boolean.parseBoolean( val );
+ }
}
Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/Messages.properties Tue Apr 7 15:29:44 2009
@@ -24,4 +24,6 @@
no.versions=cannot find any versions for {0} - exit
-not.optional.missing="did not find non-optional artifact for "
\ No newline at end of file
+not.optional.missing="did not find non-optional artifact for "
+
+attention.line=\n\n*************************************************************************************\n\n
\ No newline at end of file
Modified: maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java (original)
+++ maven/mercury/trunk/mercury-plexus/src/main/java/org/apache/maven/mercury/plexus/DefaultPlexusMercury.java Tue Apr 7 15:29:44 2009
@@ -83,6 +83,9 @@
@Configuration( name = "defaultDependencyProcessorHint", value = "maven" )
String _defaultDpHint = "maven";
+ @Configuration( name = "allowCircularDependencies", value = "true" )
+ boolean _allowCircularDependencies = true;
+
@Requirement
private Map<String, DependencyProcessor> _dependencyProcessors;
@@ -113,6 +116,11 @@
_defaultDpHint = hint;
}
// ---------------------------------------------------------------
+ public void setAllowCircularDependencies( boolean allow )
+ {
+ _allowCircularDependencies = allow;
+ }
+ // ---------------------------------------------------------------
public RemoteRepositoryM2 constructRemoteRepositoryM2( String id, URL serverUrl, String serverUser,
String serverPass, URL proxyUrl, String proxyUser,
String proxyPass,
@@ -274,7 +282,9 @@
try
{
DependencyBuilder depBuilder =
- DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null );
+ DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null
+ , Util.mapOf( new String [][] { {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies} } )
+ );
List<ArtifactMetadata> res = depBuilder.resolveConflicts( scope, artifacts, inclusions, exclusions );
@@ -303,7 +313,9 @@
try
{
DependencyBuilder depBuilder =
- DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null );
+ DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, repos, null, null, null
+ , Util.mapOf( new String [][] { {DependencyBuilder.SYSTEM_PROPERTY_ALLOW_CIRCULAR_DEPENDENCIES, ""+_allowCircularDependencies} } )
+ );
MetadataTreeNode res = depBuilder.resolveConflictsAsTree( scope, artifacts, inclusions, exclusions );
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Tue Apr 7 15:29:44 2009
@@ -142,8 +142,8 @@
_defaultRoot.mkdirs();
_defaultRoot.deleteOnExit();
- if( LOG.isWarnEnabled() )
- LOG.warn( LANG.getMessage( "default.root", _defaultRoot.getCanonicalPath() ) );
+ if( LOG.isDebugEnabled() )
+ LOG.debug( LANG.getMessage( "default.root", _defaultRoot.getCanonicalPath() ) );
}
catch ( IOException e )
{
@@ -1115,6 +1115,10 @@
{
// if( _transport != null )
// _transport.stop();
+
+ if( _defaultRoot != null )
+ FileUtil.delete( _defaultRoot );
+ _defaultRoot = null;
}
public String[] getProtocols()
Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java?rev=762820&r1=762819&r2=762820&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/Util.java Tue Apr 7 15:29:44 2009
@@ -20,8 +20,11 @@
import java.io.File;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Map;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Configurable;
+
/**
* general utility helpers
*
@@ -87,4 +90,17 @@
return (int)(Math.round( sz / 1024.))+" kb";
}
+
+ public static Map<String,String> mapOf( String [][] entries )
+ {
+ if( entries == null )
+ return null;
+
+ Map<String,String> map = new HashMap<String, String>( entries.length );
+
+ for( String [] kv : entries )
+ map.put( kv[0], kv[1] );
+
+ return map;
+ }
}