You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by Brett Porter <br...@apache.org> on 2008/07/23 07:05:00 UTC
Re: user agents
Hi John!
Thanks for the improvements to the test :) I've added a couple more
for other scenarios.
I made some adjustments to the implementation you put in place:
- made sure maven-artifact wasn't relying on the existence of maven-
core - so it sets it's bit, then core prefixes the Maven version on
there
- removed the get/set from the interface - I don't think they're
needed in the general case.
Hope these are ok.
Still up for discussion is the format. After reviewing the HTTP RFC, I
changed it to:
Apache-Maven/2.0.10-RC2-SNAPSHOT maven-artifact/2.0.10-RC2-SNAPSHOT
(Java: 1.5.0_13; Mac OS X 10.5.4)
In 2.1, this would probably be:
Apache-Maven/2.1-SNAPSHOT maven-artifact/3.0-alpha-1 (Java: 1.5.0_13;
Mac OS X 10.5.4)
(I'm fixing this up on there now since the ITs are failing in
Continuum on trunk)
ie, Product 1 = Apache-Maven/VERSION
Product 2 = maven-artifact/VERSION
and the comment is at the end
I think the debatable things are:
- is maven-artifact the right name to use?
- maven-artifact would be used by non-Maven users of maven-artifact -
but in Maven, is it needed since it can be derived from the Maven
version?
- should we include the wagon (or mercury) version in Maven?
Cheers,
Brett
On 23/07/2008, at 2:01 AM, jdcasey@apache.org wrote:
> Author: jdcasey
> Date: Tue Jul 22 09:01:10 2008
> New Revision: 678784
>
> URL: http://svn.apache.org/viewvc?rev=678784&view=rev
> Log:
> Improve support for User-Agent header in http wagons. Also, add a
> note about problems with shallow-cloning of plugin instances to
> ModelUtils. Finally, comment out the component configuration for the
> lightweight http wagon in maven-core, so we don't need to wait for
> the next shade plugin release to do the next maven RC.
>
> Modified:
> maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/main/java/org/apache/maven/artifact/manager/
> DefaultWagonManager.java
> maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/main/java/org/apache/maven/artifact/manager/WagonManager.java
> maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/test/java/org/apache/maven/artifact/manager/
> DefaultWagonManagerTest.java
> maven/components/branches/maven-2.0.10-RC/maven-core-it-runner/
> pom.xml
> maven/components/branches/maven-2.0.10-RC/maven-core/src/main/
> resources/META-INF/plexus/components.xml
> maven/components/branches/maven-2.0.10-RC/maven-project/src/main/
> java/org/apache/maven/project/ModelUtils.java
> maven/components/branches/maven-2.0.10-RC/pom.xml
>
> Modified: maven/components/branches/maven-2.0.10-RC/maven-artifact-
> manager/src/main/java/org/apache/maven/artifact/manager/
> DefaultWagonManager.java
> URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=678784&r1=678783&r2=678784&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/main/java/org/apache/maven/artifact/manager/
> DefaultWagonManager.java (original)
> +++ maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/main/java/org/apache/maven/artifact/manager/
> DefaultWagonManager.java Tue Jul 22 09:01:10 2008
> @@ -50,11 +50,15 @@
> import org.codehaus.plexus.context.ContextException;
> import org.codehaus.plexus.logging.AbstractLogEnabled;
> import
> org
> .codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
> +import
> org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
> +import
> org
> .codehaus
> .plexus.personality.plexus.lifecycle.phase.InitializationException;
> import org.codehaus.plexus.util.FileUtils;
> +import org.codehaus.plexus.util.IOUtil;
> import org.codehaus.plexus.util.xml.Xpp3Dom;
>
> import java.io.File;
> import java.io.IOException;
> +import java.io.InputStream;
> import java.net.MalformedURLException;
> import java.net.URL;
> import java.security.NoSuchAlgorithmException;
> @@ -64,16 +68,19 @@
> import java.util.LinkedHashMap;
> import java.util.List;
> import java.util.Map;
> +import java.util.Properties;
> import java.util.Set;
>
> public class DefaultWagonManager
> extends AbstractLogEnabled
> - implements WagonManager, Contextualizable
> + implements WagonManager, Contextualizable, Initializable
> {
> private static final String WILDCARD = "*";
>
> private static final String EXTERNAL_WILDCARD = "external:*";
>
> + private static final String MAVEN_CORE_PROPERTIES = "META-INF/
> maven/org.apache.maven/maven-core/pom.properties";
> +
> private PlexusContainer container;
>
> // TODO: proxies, authentication and mirrors are via settings,
> and should come in via an alternate method - perhaps
> @@ -102,6 +109,10 @@
>
> private RepositoryPermissions defaultRepositoryPermissions;
>
> + private String httpUserAgent;
> +
> + private String httpUserAgentDetails;
> +
> // TODO: this leaks the component in the public api - it is
> never released back to the container
> public Wagon getWagon( Repository repository )
> throws UnsupportedProtocolException,
> WagonConfigurationException
> @@ -115,7 +126,7 @@
>
> Wagon wagon = getWagon( protocol );
>
> - configureWagon( wagon, repository.getId() );
> + configureWagon( wagon, repository.getId(), protocol );
>
> return wagon;
> }
> @@ -988,21 +999,27 @@
> ArtifactRepository repository )
> throws WagonConfigurationException
> {
> - configureWagon( wagon, repository.getId() );
> + configureWagon( wagon, repository.getId(),
> repository.getProtocol() );
> }
>
> private void configureWagon( Wagon wagon,
> - String repositoryId )
> + String repositoryId,
> + String protocol )
> throws WagonConfigurationException
> {
> - if ( serverConfigurationMap.containsKey( repositoryId ) )
> + PlexusConfiguration config = (PlexusConfiguration)
> serverConfigurationMap.get( repositoryId );
> + if ( protocol.startsWith( "http" ) )
> + {
> + config = updateUserAgentForHttp( wagon, config );
> + }
> +
> + if ( config != null )
> {
> ComponentConfigurator componentConfigurator = null;
> try
> {
> componentConfigurator = (ComponentConfigurator)
> container.lookup( ComponentConfigurator.ROLE );
> - componentConfigurator.configureComponent( wagon,
> (PlexusConfiguration) serverConfigurationMap
> - .get( repositoryId ),
> container.getContainerRealm() );
> + componentConfigurator.configureComponent( wagon,
> config, container.getContainerRealm() );
> }
> catch ( final ComponentLookupException e )
> {
> @@ -1032,6 +1049,50 @@
> }
> }
>
> + // TODO: Remove this, once the maven-shade-plugin 1.2 release
> is out, allowing configuration of httpHeaders in the components.xml
> + private PlexusConfiguration updateUserAgentForHttp( Wagon
> wagon, PlexusConfiguration config )
> + {
> + if ( config == null )
> + {
> + config = new XmlPlexusConfiguration( "configuration" );
> + }
> +
> + String userAgent = getHttpUserAgentString();
> +
> + if ( userAgent != null )
> + {
> + try
> + {
> + wagon.getClass().getMethod( "setHttpHeaders", new
> Class[]{ Properties.class } );
> +
> + PlexusConfiguration headerConfig =
> config.getChild( "httpHeaders", true );
> + if ( headerConfig.getChild( "User-Agent", false )
> == null )
> + {
> + XmlPlexusConfiguration propertyConfig = new
> XmlPlexusConfiguration( "property" );
> + headerConfig.addChild( propertyConfig );
> +
> + XmlPlexusConfiguration nameConfig = new
> XmlPlexusConfiguration( "name" );
> + nameConfig.setValue( "User-Agent" );
> + propertyConfig.addChild( nameConfig );
> +
> + XmlPlexusConfiguration versionConfig = new
> XmlPlexusConfiguration( "value" );
> + versionConfig.setValue( userAgent );
> + propertyConfig.addChild( versionConfig );
> + }
> + }
> + catch ( SecurityException e )
> + {
> + // forget it. this method is public, if it exists.
> + }
> + catch ( NoSuchMethodException e )
> + {
> + // forget it.
> + }
> + }
> +
> + return config;
> + }
> +
> public void addConfiguration( String repositoryId,
> Xpp3Dom configuration )
> {
> @@ -1049,4 +1110,87 @@
> {
> this.defaultRepositoryPermissions =
> defaultRepositoryPermissions;
> }
> +
> + // TODO: Remove this, once the maven-shade-plugin 1.2 release
> is out, allowing configuration of httpHeaders in the components.xml
> + public void initialize()
> + throws InitializationException
> + {
> + if ( httpUserAgent == null )
> + {
> + httpUserAgent = "ApacheMavenArtifact/2.0";
> + }
> +
> + if ( httpUserAgentDetails == null )
> + {
> + InputStream resourceAsStream = null;
> + try
> + {
> + Properties properties = new Properties();
> + resourceAsStream =
> getClass
> ().getClassLoader().getResourceAsStream( MAVEN_CORE_PROPERTIES );
> +
> + if ( resourceAsStream != null )
> + {
> + try
> + {
> + properties.load( resourceAsStream );
> +
> + httpUserAgentDetails =
> + "Apache Maven " +
> properties.getProperty( "version" ) + "; JDK "
> + +
> System.getProperty( "java.version" ) + "; " +
> System.getProperty( "os.name" ) + " "
> + + System.getProperty( "os.version" );
> + }
> + catch ( IOException e )
> + {
> + getLogger().warn(
> + "Failed to load Maven
> core properties from:\n" + MAVEN_CORE_PROPERTIES
> + + "\n\nUser-Agent
> HTTP header may be incorrect for artifact resolution." );
> + }
> + }
> + }
> + finally
> + {
> + IOUtil.close( resourceAsStream );
> + }
> + }
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + public void setHttpUserAgent( String userAgent )
> + {
> + this.httpUserAgent = userAgent;
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + public String getHttpUserAgent()
> + {
> + return httpUserAgent;
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + public void setHttpUserAgentDetails( String userAgentDetails )
> + {
> + this.httpUserAgentDetails = userAgentDetails;
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + public String getUserAgentDetails()
> + {
> + return httpUserAgentDetails;
> + }
> +
> + /**
> + * {@inheritDoc}
> + */
> + public String getHttpUserAgentString()
> + {
> + return httpUserAgent == null ? null :
> String.valueOf( httpUserAgent ) + " (" +
> String.valueOf( httpUserAgentDetails ) + ")";
> + }
> }
>
> Modified: maven/components/branches/maven-2.0.10-RC/maven-artifact-
> manager/src/main/java/org/apache/maven/artifact/manager/
> WagonManager.java
> URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java?rev=678784&r1=678783&r2=678784&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/main/java/org/apache/maven/artifact/manager/WagonManager.java
> (original)
> +++ maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/main/java/org/apache/maven/artifact/manager/WagonManager.java
> Tue Jul 22 09:01:10 2008
> @@ -126,4 +126,45 @@
> void setDefaultRepositoryPermissions( RepositoryPermissions
> permissions );
>
> ArtifactRepository getMirrorRepository( ArtifactRepository
> repository );
> +
> + /**
> + * Allow configuration of the User-Agent HTTP header used for
> http wagons.
> + *
> + * @since 2.0.10
> + */
> + void setHttpUserAgent( String userAgent );
> +
> + /**
> + * Retrieve the User-Agent HTTP header used for http wagons.
> + *
> + * @since 2.0.10
> + */
> + String getHttpUserAgent();
> +
> + /**
> + * Allow configuration of the details of the User-Agent HTTP
> header (beyond
> + * the initial value) used for http wagons. By default, this
> value will
> + * contain specific information about the tool using maven-
> artifact, along
> + * with the operating system and JDK version.
> + *
> + * @since 2.0.10
> + */
> + void setHttpUserAgentDetails( String userAgentDetails );
> +
> + /**
> + * Retrieve the details of the User-Agent HTTP header (beyond
> + * the initial value) used for http wagons. By default, this
> value will
> + * contain specific information about the tool using maven-
> artifact, along
> + * with the operating system and JDK version.
> + *
> + * @since 2.0.10
> + */
> + String getUserAgentDetails();
> +
> + /**
> + * Retrieve the full User-Agent HTTP header value for use in
> http wagons.
> + *
> + * @since 2.0.10
> + */
> + String getHttpUserAgentString();
> }
>
> Modified: maven/components/branches/maven-2.0.10-RC/maven-artifact-
> manager/src/test/java/org/apache/maven/artifact/manager/
> DefaultWagonManagerTest.java
> URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java?rev=678784&r1=678783&r2=678784&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/test/java/org/apache/maven/artifact/manager/
> DefaultWagonManagerTest.java (original)
> +++ maven/components/branches/maven-2.0.10-RC/maven-artifact-manager/
> src/test/java/org/apache/maven/artifact/manager/
> DefaultWagonManagerTest.java Tue Jul 22 09:01:10 2008
> @@ -53,7 +53,7 @@
> public class DefaultWagonManagerTest
> extends PlexusTestCase
> {
> - private DefaultWagonManager wagonManager;
> + private WagonManager wagonManager;
>
> private TransferListener transferListener = new Debug();
>
> @@ -64,7 +64,7 @@
> {
> super.setUp();
>
> - wagonManager = (DefaultWagonManager)
> lookup( WagonManager.ROLE );
> + wagonManager = (WagonManager) lookup( WagonManager.ROLE );
>
> artifactFactory = (ArtifactFactory)
> lookup( ArtifactFactory.ROLE );
> }
>
> Modified: maven/components/branches/maven-2.0.10-RC/maven-core-it-
> runner/pom.xml
> URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-core-it-runner/pom.xml?rev=678784&r1=678783&r2=678784&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- maven/components/branches/maven-2.0.10-RC/maven-core-it-runner/
> pom.xml (original)
> +++ maven/components/branches/maven-2.0.10-RC/maven-core-it-runner/
> pom.xml Tue Jul 22 09:01:10 2008
> @@ -23,7 +23,7 @@
> <modelVersion>4.0.0</modelVersion>
>
> <groupId>org.apache.maven</groupId>
> - <version>2.0.10-RC1-SNAPSHOT</version>
> + <version>2.0.10-RC2-SNAPSHOT</version>
> <artifactId>maven-core-it-runner</artifactId>
> <name>Integration Test Executor</name>
>
>
> Modified: maven/components/branches/maven-2.0.10-RC/maven-core/src/
> main/resources/META-INF/plexus/components.xml
> URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-core/src/main/resources/META-INF/plexus/components.xml?rev=678784&r1=678783&r2=678784&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- maven/components/branches/maven-2.0.10-RC/maven-core/src/main/
> resources/META-INF/plexus/components.xml (original)
> +++ maven/components/branches/maven-2.0.10-RC/maven-core/src/main/
> resources/META-INF/plexus/components.xml Tue Jul 22 09:01:10 2008
> @@ -584,6 +584,8 @@
> </requirements>
> </component>
>
> + <!-- TODO: Re-enable this once maven-shade-plugin 1.2 is
> release and can be
> + used to merge this configuration with that of the wagon
> artifacts.
> <component>
> <role>org.apache.maven.wagon.Wagon</role>
> <role-hint>http</role-hint>
> @@ -616,5 +618,6 @@
> </httpHeaders>
> </configuration>
> </component>
> + -->
> </components>
> </component-set>
>
> Modified: maven/components/branches/maven-2.0.10-RC/maven-project/
> src/main/java/org/apache/maven/project/ModelUtils.java
> URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java?rev=678784&r1=678783&r2=678784&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- maven/components/branches/maven-2.0.10-RC/maven-project/src/main/
> java/org/apache/maven/project/ModelUtils.java (original)
> +++ maven/components/branches/maven-2.0.10-RC/maven-project/src/main/
> java/org/apache/maven/project/ModelUtils.java Tue Jul 22 09:01:10 2008
> @@ -562,6 +562,8 @@
> public static Model cloneModel( Model model )
> {
> // TODO: would be nice for the modello:java code to generate
> this as a copy constructor
> + // FIXME: Fix deep cloning issues with existing plugin
> instances (setting
> + // a version when resolved will pollute the original
> model instance)
> Model newModel = new Model();
> ModelInheritanceAssembler assembler = new
> DefaultModelInheritanceAssembler();
> newModel.setModelVersion( model.getModelVersion() );
>
> Modified: maven/components/branches/maven-2.0.10-RC/pom.xml
> URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/pom.xml?rev=678784&r1=678783&r2=678784&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- maven/components/branches/maven-2.0.10-RC/pom.xml (original)
> +++ maven/components/branches/maven-2.0.10-RC/pom.xml Tue Jul 22
> 09:01:10 2008
> @@ -205,6 +205,7 @@
> <excludes>
> <!-- TODO: These represent method ADDITIONS from
> 2.0.9, and should be removed after
> 2.0.10 is released. -->
> + <exclude>org/apache/maven/artifact/manager/
> WagonManager*</exclude>
> <exclude>org/apache/maven/artifact/metadata/
> ArtifactMetadataSource*</exclude>
> <exclude>org/apache/maven/project/
> MavenProjectBuilder*</exclude>
> <exclude>org/apache/maven/project/
> ProjectBuilderConfiguration*</exclude>
>
>
--
Brett Porter
brett@apache.org
http://blogs.exist.com/bporter/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org