Author: jdcasey Date: Wed Jul 6 17:17:37 2005 New Revision: 209550 URL: http://svn.apache.org/viewcvs?rev=209550&view=rev Log: Working on: MNG-377
o Added maven-plugin-mapping project to handle repository metadata that contains prefix-to-artifactId mappings for groups of plugins o Added builder classes for plugin mappings o Modified maven-artifact and maven-artifact-manager to handle the concept of repository metadata in addition to artifact metadata. o Added pluginGroups section to settings.xml, new code to merge these lists of plugin groups, and a unit test to ensure that this merge is taking place properly. o Added maven-plugin-mapping to dependencies of maven-core, along with the list of builds to be performed by mboot. Should be ready to incorporate plugin mapping consultation into the lifecycle executor and the deploy mojo... Added: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java (with props) maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java (with props) maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManagementException.java (with props) maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java (with props) maven/components/trunk/maven-plugin-mapping/ maven/components/trunk/maven-plugin-mapping/pom.xml (with props) maven/components/trunk/maven-plugin-mapping/src/ maven/components/trunk/maven-plugin-mapping/src/main/ maven/components/trunk/maven-plugin-mapping/src/main/java/ maven/components/trunk/maven-plugin-mapping/src/main/java/org/ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java (with props) maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java (with props) maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManagementException.java (with props) maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java (with props) maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java (with props) maven/components/trunk/maven-plugin-mapping/src/main/mdo/ maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo (with props) maven/components/trunk/maven-plugin-mapping/src/main/resources/ maven/components/trunk/maven-plugin-mapping/src/test/ maven/components/trunk/maven-plugin-mapping/src/test/java/ maven/components/trunk/maven-settings/src/test/ maven/components/trunk/maven-settings/src/test/java/ maven/components/trunk/maven-settings/src/test/java/org/ maven/components/trunk/maven-settings/src/test/java/org/apache/ maven/components/trunk/maven-settings/src/test/java/org/apache/maven/ maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/ maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java (with props) Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/LegacyRepositoryLayout.java maven/components/trunk/maven-core/pom.xml maven/components/trunk/maven-mboot2/src/main/java/MBoot.java maven/components/trunk/maven-model/pom.xml maven/components/trunk/maven-settings/settings.mdo maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original) +++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Wed Jul 6 17:17:37 2005 @@ -20,6 +20,7 @@ import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.DefaultArtifactRepository; +import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; import org.apache.maven.wagon.ConnectionException; import org.apache.maven.wagon.ResourceDoesNotExistException; import org.apache.maven.wagon.TransferFailedException; @@ -98,6 +99,14 @@ putRemoteFile( repository, source, repository.pathOfMetadata( artifactMetadata ), null ); } + public void putRepositoryMetadata( File source, RepositoryMetadata metadata, ArtifactRepository repository ) + throws TransferFailedException + { + getLogger().info( "Uploading " + metadata ); + + putRemoteFile( repository, source, metadata.getRepositoryPath(), null ); + } + private void putRemoteFile( ArtifactRepository repository, File source, String remotePath, TransferListener downloadMonitor ) throws TransferFailedException @@ -239,6 +248,16 @@ String remotePath = remoteRepository.pathOfMetadata( metadata ); getLogger().info( "Retrieving " + metadata ); + getRemoteFile( remoteRepository, destination, remotePath, null ); + } + + public void getRepositoryMetadata( RepositoryMetadata metadata, ArtifactRepository remoteRepository, File destination ) + throws TransferFailedException, ResourceDoesNotExistException + { + String remotePath = metadata.getRepositoryPath(); + + getLogger().info( "Retrieving " + metadata ); + getRemoteFile( remoteRepository, destination, remotePath, null ); } Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java (original) +++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java Wed Jul 6 17:17:37 2005 @@ -20,6 +20,7 @@ import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; +import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; import org.apache.maven.wagon.ResourceDoesNotExistException; import org.apache.maven.wagon.TransferFailedException; import org.apache.maven.wagon.UnsupportedProtocolException; @@ -57,10 +58,17 @@ public void getArtifactMetadata( ArtifactMetadata metadata, ArtifactRepository remoteRepository, File destination ) throws TransferFailedException, ResourceDoesNotExistException; + public void putRepositoryMetadata( File source, RepositoryMetadata metadata, ArtifactRepository repository ) + throws TransferFailedException; + + public void getRepositoryMetadata( RepositoryMetadata metadata, ArtifactRepository remoteRepository, + File destination ) + throws TransferFailedException, ResourceDoesNotExistException; + void addProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts ); void addAuthenticationInfo( String repositoryId, String username, String password, String privateKey, - String passphrase ); + String passphrase ); void addMirror( String id, String mirrorOf, String url ); Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java (original) +++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java Wed Jul 6 17:17:37 2005 @@ -63,6 +63,11 @@ { return layout.pathOfMetadata( artifactMetadata ); } + + public String formatDirectory( String directory ) + { + return layout.formatDirectory( directory ); + } public String getSnapshotPolicy() { Added: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java (added) +++ maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,67 @@ +package org.apache.maven.artifact.repository.metadata; + +import org.apache.maven.artifact.manager.WagonManager; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.wagon.ResourceDoesNotExistException; +import org.apache.maven.wagon.TransferFailedException; + +import java.io.File; + +public class DefaultRepositoryMetadataManager + implements RepositoryMetadataManager +{ + + // component requirement + private WagonManager wagonManager; + + public void get( RepositoryMetadata metadata, ArtifactRepository remote, ArtifactRepository local ) + throws RepositoryMetadataManagementException + { + String realignedPath = local.formatDirectory( metadata.getRepositoryPath() ); + + realignedPath = realignedPath.replace( File.separatorChar, '/' ); + + if ( !realignedPath.startsWith( "/" ) ) + { + realignedPath = "/" + realignedPath; + } + + realignedPath = "/REPOSITORY-INF/" + remote.getId() + realignedPath; + + File metadataFile = new File( local.getBasedir(), realignedPath ); + + try + { + wagonManager.getRepositoryMetadata( metadata, remote, metadataFile ); + + metadata.setFile( metadataFile ); + } + catch ( TransferFailedException e ) + { + throw new RepositoryMetadataManagementException( metadata, "Failed to download repository metadata.", e ); + } + catch ( ResourceDoesNotExistException e ) + { + throw new RepositoryMetadataManagementException( metadata, "Remote repository metadata not found.", e ); + } + } + + public void put( RepositoryMetadata metadata, ArtifactRepository remote ) + throws RepositoryMetadataManagementException + { + File metadataFile = metadata.getFile(); + + try + { + wagonManager.putRepositoryMetadata( metadataFile, metadata, remote ); + + metadata.setFile( metadataFile ); + } + catch ( TransferFailedException e ) + { + throw new RepositoryMetadataManagementException( metadata, "Failed to upload repository metadata.", e ); + } + + } + +} Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java Wed Jul 6 17:17:37 2005 @@ -46,6 +46,8 @@ String pathOf( Artifact artifact ); String pathOfMetadata( ArtifactMetadata artifactMetadata ); + + String formatDirectory( String directory ); String getUrl(); Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java Wed Jul 6 17:17:37 2005 @@ -30,4 +30,6 @@ String pathOf( Artifact artifact ); String pathOfMetadata( ArtifactMetadata metadata ); + + String formatDirectory( String directory ); } Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java Wed Jul 6 17:17:37 2005 @@ -33,7 +33,7 @@ StringBuffer path = new StringBuffer(); - path.append( artifact.getGroupId().replace( '.', '/' ) ).append( '/' ); + path.append( formatDirectory( artifact.getGroupId() ) ).append( '/' ); path.append( artifact.getArtifactId() ).append( '/' ); path.append( artifact.getBaseVersion() ).append( '/' ); path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() ); @@ -55,7 +55,7 @@ { StringBuffer path = new StringBuffer(); - path.append( metadata.getGroupId().replace( '.', '/' ) ).append( '/' ); + path.append( formatDirectory( metadata.getGroupId() ) ).append( '/' ); path.append( metadata.getArtifactId() ).append( '/' ); if ( !metadata.getBaseVersion().equals( "RELEASE" ) ) { @@ -67,4 +67,8 @@ return path.toString(); } + public String formatDirectory( String directory ) + { + return directory.replace( '.', '/' ); + } } Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/LegacyRepositoryLayout.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/LegacyRepositoryLayout.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/LegacyRepositoryLayout.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/LegacyRepositoryLayout.java Wed Jul 6 17:17:37 2005 @@ -58,5 +58,10 @@ return path.toString(); } + + public String formatDirectory( String directory ) + { + return directory; + } } Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java (added) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,14 @@ +package org.apache.maven.artifact.repository.metadata; + +import java.io.File; + +public interface RepositoryMetadata +{ + + String getRepositoryPath(); + + void setFile( File metadataFile ); + + File getFile(); + +} Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManagementException.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManagementException.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManagementException.java (added) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManagementException.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,35 @@ +package org.apache.maven.artifact.repository.metadata; + +public class RepositoryMetadataManagementException + extends Exception +{ + + private final RepositoryMetadata metadata; + + public RepositoryMetadataManagementException( RepositoryMetadata metadata ) + { + super( "Failed to resolve repository metadata: " + metadata + "."); + + this.metadata = metadata; + } + + public RepositoryMetadataManagementException( RepositoryMetadata metadata, String message, Throwable cause ) + { + super( "Failed to resolve repository metadata: " + metadata + ". Error was: " + cause.getMessage(), cause ); + + this.metadata = metadata; + } + + public RepositoryMetadataManagementException( RepositoryMetadata metadata, String message ) + { + super( "Failed to resolve repository metadata: " + metadata + "."); + + this.metadata = metadata; + } + + public RepositoryMetadata getMetadata() + { + return metadata; + } + +} Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManagementException.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManagementException.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java (added) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,14 @@ +package org.apache.maven.artifact.repository.metadata; + +import org.apache.maven.artifact.repository.ArtifactRepository; + +public interface RepositoryMetadataManager +{ + + void get( RepositoryMetadata repositoryMetadata, ArtifactRepository remote, ArtifactRepository local ) + throws RepositoryMetadataManagementException; + + void put( RepositoryMetadata repositoryMetadata, ArtifactRepository remote ) + throws RepositoryMetadataManagementException; + +} Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/components/trunk/maven-core/pom.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/pom.xml?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-core/pom.xml (original) +++ maven/components/trunk/maven-core/pom.xml Wed Jul 6 17:17:37 2005 @@ -44,6 +44,11 @@ </dependency> <dependency> <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-mapping</artifactId> + <version>2.0-beta-1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-registry</artifactId> <version>2.0-beta-1-SNAPSHOT</version> </dependency> Modified: maven/components/trunk/maven-mboot2/src/main/java/MBoot.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-mboot2/src/main/java/MBoot.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-mboot2/src/main/java/MBoot.java (original) +++ maven/components/trunk/maven-mboot2/src/main/java/MBoot.java Wed Jul 6 17:17:37 2005 @@ -39,6 +39,7 @@ { String[] builds = new String[]{"maven-model", "maven-settings", "maven-monitor", "maven-plugin-api", "maven-plugin-descriptor", "maven-artifact", "maven-artifact-manager", "maven-artifact-test", + "maven-plugin-mapping", "maven-script/maven-script-beanshell", "maven-script/maven-script-marmalade", "maven-project", "maven-profile", "maven-plugin-registry", "maven-reporting/maven-reporting-api", "maven-core", "maven-archiver", "maven-plugin-tools/maven-plugin-tools-api", "maven-plugin-tools/maven-plugin-tools-java", @@ -60,6 +61,7 @@ targetVersions.put( "maven-profile", "1.0.0" ); targetVersions.put( "maven-plugin-registry", "1.0.0" ); targetVersions.put( "maven-plugin-descriptor", "1.0.0" ); + targetVersions.put( "maven-plugin-mapping", "1.0.0" ); MODELLO_TARGET_VERSIONS = Collections.unmodifiableMap( targetVersions ); @@ -69,6 +71,7 @@ modelFiles.put( "maven-profile", "profiles.mdo" ); modelFiles.put( "maven-plugin-registry", "plugin-registry.mdo" ); modelFiles.put( "maven-plugin-descriptor", "src/main/mdo/lifecycle.mdo" ); + modelFiles.put( "maven-plugin-mapping", "src/main/mdo/plugins.mdo" ); MODELLO_MODEL_FILES = Collections.unmodifiableMap( modelFiles ); } Modified: maven/components/trunk/maven-model/pom.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-model/pom.xml?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-model/pom.xml (original) +++ maven/components/trunk/maven-model/pom.xml Wed Jul 6 17:17:37 2005 @@ -33,6 +33,7 @@ <goal>xpp3-writer</goal> <goal>java</goal> <goal>xpp3-reader</goal> + <goal>xsd</goal> </goals> </execution> </executions> Added: maven/components/trunk/maven-plugin-mapping/pom.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/pom.xml?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-plugin-mapping/pom.xml (added) +++ maven/components/trunk/maven-plugin-mapping/pom.xml Wed Jul 6 17:17:37 2005 @@ -0,0 +1,58 @@ +<project> + <parent> + <artifactId>maven</artifactId> + <groupId>org.apache.maven</groupId> + <version>2.0-beta-1-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-mapping</artifactId> + <version>2.0-beta-1-SNAPSHOT</version> + <name>Maven Plugin Mapping</name> + <description>Maven Plugin Mapping</description> + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + <version>2.0-beta-1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact-manager</artifactId> + <version>2.0-beta-1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-model</artifactId> + <version>2.0-beta-1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>plexus</groupId> + <artifactId>plexus-utils</artifactId> + <version>1.0.1-SNAPSHOT</version> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.codehaus.modello</groupId> + <artifactId>modello-maven-plugin</artifactId> + <version>1.0-alpha-3</version> + <configuration> + <version>1.0.0</version> + <model>src/main/mdo/plugins.mdo</model> + </configuration> + <executions> + <execution> + <goals> + <goal>xpp3-writer</goal> + <goal>java</goal> + <goal>xpp3-reader</goal> + <goal>xsd</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Propchange: maven/components/trunk/maven-plugin-mapping/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-plugin-mapping/pom.xml ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java (added) +++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,101 @@ +package org.apache.maven.plugin.mapping; + +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManagementException; +import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager; +import org.apache.maven.plugin.mapping.io.xpp3.PluginMappingXpp3Reader; +import org.apache.maven.plugin.mapping.metadata.PluginMappingMetadata; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.util.Iterator; +import java.util.List; + +public class DefaultPluginMappingBuilder + implements MavenPluginMappingBuilder +{ + + // component requirement + private RepositoryMetadataManager repositoryMetadataManager; + + public PluginMappingManager loadPluginMappings( List pluginGroupIds, List pluginRepositories, + ArtifactRepository localRepository ) + throws RepositoryMetadataManagementException, PluginMappingManagementException + { + PluginMappingManager mappingManager = new PluginMappingManager(); + + for ( Iterator it = pluginGroupIds.iterator(); it.hasNext(); ) + { + String groupId = (String) it.next(); + + File mappingFile = resolveMappingMetadata( groupId, pluginRepositories, localRepository ); + + PluginMap pluginMap = readPluginMap( mappingFile ); + + mappingManager.addPluginMap( pluginMap ); + } + + return mappingManager; + } + + private PluginMap readPluginMap( File mappingFile ) throws PluginMappingManagementException + { + Reader fileReader = null; + try + { + fileReader = new FileReader( mappingFile ); + + PluginMappingXpp3Reader mappingReader = new PluginMappingXpp3Reader(); + + return mappingReader.read(fileReader); + } + catch ( IOException e ) + { + throw new PluginMappingManagementException( "Cannot read plugin mappings from: " + mappingFile, e ); + } + catch ( XmlPullParserException e ) + { + throw new PluginMappingManagementException( "Cannot parse plugin mappings from: " + mappingFile, e ); + } + finally + { + IOUtil.close( fileReader ); + } + } + + private File resolveMappingMetadata( String groupId, List pluginRepositories, ArtifactRepository localRepository ) + throws RepositoryMetadataManagementException + { + PluginMappingMetadata metadata = new PluginMappingMetadata( groupId ); + + RepositoryMetadataManagementException repositoryException = null; + + for ( Iterator repoIterator = pluginRepositories.iterator(); repoIterator.hasNext(); ) + { + ArtifactRepository repository = (ArtifactRepository) repoIterator.next(); + + try + { + repositoryMetadataManager.get( metadata, repository, localRepository ); + + break; + } + catch ( RepositoryMetadataManagementException e ) + { + repositoryException = e; + } + } + + if ( repositoryException != null ) + { + throw repositoryException; + } + + return metadata.getFile(); + } + +} Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/DefaultPluginMappingBuilder.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java (added) +++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,15 @@ +package org.apache.maven.plugin.mapping; + +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManagementException; + +import java.util.List; + +public interface MavenPluginMappingBuilder +{ + + PluginMappingManager loadPluginMappings( List pluginGroupIds, List pluginRepositories, + ArtifactRepository localRepository ) + throws RepositoryMetadataManagementException, PluginMappingManagementException; + +} Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/MavenPluginMappingBuilder.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManagementException.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManagementException.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManagementException.java (added) +++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManagementException.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,17 @@ +package org.apache.maven.plugin.mapping; + +public class PluginMappingManagementException + extends Exception +{ + + public PluginMappingManagementException( String message, Throwable cause ) + { + super( message, cause ); + } + + public PluginMappingManagementException( String message ) + { + super( message ); + } + +} Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManagementException.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManagementException.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java (added) +++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,68 @@ +package org.apache.maven.plugin.mapping; + +import org.apache.maven.model.Plugin; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class PluginMappingManager +{ + + private List mappings = new ArrayList(); + + private Map pluginDefinitionsByPrefix = new HashMap(); + + public void addPluginMap( PluginMap pluginMap ) + { + mappings.add( pluginMap ); + + // flush the cache. + pluginDefinitionsByPrefix = null; + } + + public Plugin getByPrefix( String pluginPrefix ) + { + synchronized ( this ) + { + if ( pluginDefinitionsByPrefix == null ) + { + calculatePluginDefinitionsByPrefix(); + } + } + + return (Plugin) pluginDefinitionsByPrefix.get( pluginPrefix ); + } + + private void calculatePluginDefinitionsByPrefix() + { + pluginDefinitionsByPrefix = new HashMap(); + + for ( Iterator it = mappings.iterator(); it.hasNext(); ) + { + PluginMap pluginMap = (PluginMap) it.next(); + + String groupId = pluginMap.getGroupId(); + + for ( Iterator pluginIterator = pluginMap.getPlugins().iterator(); pluginIterator.hasNext(); ) + { + MappedPlugin mapping = (MappedPlugin) pluginIterator.next(); + + String prefix = mapping.getPrefix(); + + String artifactId = mapping.getArtifactId(); + + Plugin plugin = new Plugin(); + + plugin.setGroupId( groupId ); + + plugin.setArtifactId( artifactId ); + + pluginDefinitionsByPrefix.put( prefix, plugin ); + } + } + } + +} Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/PluginMappingManager.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java (added) +++ maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,36 @@ +package org.apache.maven.plugin.mapping.metadata; + +import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; + +import java.io.File; + +public class PluginMappingMetadata + implements RepositoryMetadata +{ + private static final String PLUGIN_MAPPING_FILE = "plugins.xml"; + + private final String groupId; + + private File metadataFile; + + public PluginMappingMetadata( String groupId ) + { + this.groupId = groupId; + } + + public String getRepositoryPath() + { + return groupId + "/" + PLUGIN_MAPPING_FILE; + } + + public void setFile( File metadataFile ) + { + this.metadataFile = metadataFile; + } + + public File getFile() + { + return metadataFile; + } + +} Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-plugin-mapping/src/main/java/org/apache/maven/plugin/mapping/metadata/PluginMappingMetadata.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo (added) +++ maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo Wed Jul 6 17:17:37 2005 @@ -0,0 +1,59 @@ +<model> + <id>plugin-map</id> + <name>PluginMapping</name> + <description>Mappings for searching for a plugin within a particular groupId.</description> + <defaults> + <default> + <key>package</key> + <value>org.apache.maven.plugin.mapping</value> + </default> + </defaults> + <classes> + <class rootElement="true" xml.tagName="mapping"> + <name>PluginMap</name> + <version>1.0.0</version> + <description>Root model class, containing various mappings for plugins in this group.</description> + <fields> + <field> + <name>groupId</name> + <version>1.0.0</version> + <type>String</type> + <required>true</required> + <description>The groupId for plugins mapped in this file.</description> + </field> + <field> + <name>plugins</name> + <version>1.0.0</version> + <required>true</required> + <description>The set of plugin mappings</description> + <association> + <type>MappedPlugin</type> + <multiplicity>*</multiplicity> + </association> + </field> + </fields> + </class> + <class xml.tagName="plugin"> + <name>MappedPlugin</name> + <version>1.0.0</version> + <description>Mapping information for a single plugin within this group</description> + <comment>NOTE: plugin version is _NOT_ included here, since it is resolved using a separate algorithm.</comment> + <fields> + <field> + <name>prefix</name> + <type>String</type> + <required>true</required> + <version>1.0.0</version> + <description>The plugin invocation prefix (i.e. eclipse for eclipse:eclipse)</description> + </field> + <field> + <name>artifactId</name> + <type>String</type> + <required>true</required> + <version>1.0.0</version> + <description>The plugin artifactId</description> + </field> + </fields> + </class> + </classes> +</model> \ No newline at end of file Propchange: maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-plugin-mapping/src/main/mdo/plugins.mdo ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/components/trunk/maven-settings/settings.mdo URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-settings/settings.mdo?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-settings/settings.mdo (original) +++ maven/components/trunk/maven-settings/settings.mdo Wed Jul 6 17:17:37 2005 @@ -180,6 +180,15 @@ <multiplicity>*</multiplicity> </association> </field> + <field> + <name>pluginGroups</name> + <version>1.0.0</version> + <description>List of groupIds to search for a plugin when that plugin groupId is not explicitly provided.</description> + <association> + <type>String</type> + <multiplicity>*</multiplicity> + </association> + </field> </fields> <codeSegments> <codeSegment> Modified: maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java (original) +++ maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java Wed Jul 6 17:17:37 2005 @@ -34,8 +34,10 @@ private String localRepositorySourceLevel = TrackableBase.USER_LEVEL; - private final Settings settings; + private Map pluginGroupIdSourceLevels = new HashMap(); + private final Settings settings; + public RuntimeInfo( Settings settings ) { this.settings = settings; @@ -79,6 +81,25 @@ public String getSourceLevelForActiveProfile( String activeProfile ) { String sourceLevel = (String) activeProfileToSourceLevel.get( activeProfile ); + + if ( sourceLevel != null ) + { + return sourceLevel; + } + else + { + return settings.getSourceLevel(); + } + } + + public void setPluginGroupIdSourceLevel( String pluginGroupId, String sourceLevel ) + { + pluginGroupIdSourceLevels.put( pluginGroupId, sourceLevel ); + } + + public String getSourceLevelForPluginGroupId( String pluginGroupId ) + { + String sourceLevel = (String) pluginGroupIdSourceLevels.get( pluginGroupId ); if ( sourceLevel != null ) { Modified: maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java?rev=209550&r1=209549&r2=209550&view=diff ============================================================================== --- maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java (original) +++ maven/components/trunk/maven-settings/src/main/java/org/apache/maven/settings/SettingsUtils.java Wed Jul 6 17:17:37 2005 @@ -55,6 +55,21 @@ } } + List dominantPluginGroupIds = dominant.getPluginGroups(); + List recessivePluginGroupIds = recessive.getPluginGroups(); + + for ( Iterator it = recessivePluginGroupIds.iterator(); it.hasNext(); ) + { + String pluginGroupId = (String) it.next(); + + if ( !dominantPluginGroupIds.contains( pluginGroupId ) ) + { + dominantPluginGroupIds.add( pluginGroupId ); + + dominant.getRuntimeInfo().setPluginGroupIdSourceLevel( pluginGroupId, recessiveSourceLevel ); + } + } + if ( StringUtils.isEmpty( dominant.getLocalRepository() ) ) { dominant.setLocalRepository( recessive.getLocalRepository() ); Added: maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java?rev=209550&view=auto ============================================================================== --- maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java (added) +++ maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java Wed Jul 6 17:17:37 2005 @@ -0,0 +1,35 @@ +package org.apache.maven.settings; + +import java.util.List; + +import junit.framework.TestCase; + +public class SettingsUtilsTest + extends TestCase +{ + + public void testShouldAppendRecessivePluginGroupIds() + { + Settings dominant = new Settings(); + dominant.addPluginGroup( "org.apache.maven.plugins" ); + dominant.addPluginGroup( "org.codehaus.modello" ); + + dominant.setRuntimeInfo(new RuntimeInfo(dominant)); + + Settings recessive = new Settings(); + recessive.addPluginGroup( "org.codehaus.plexus" ); + + recessive.setRuntimeInfo(new RuntimeInfo(recessive)); + + SettingsUtils.merge( dominant, recessive, Settings.GLOBAL_LEVEL ); + + List pluginGroups = dominant.getPluginGroups(); + + assertNotNull( pluginGroups ); + assertEquals( 3, pluginGroups.size() ); + assertEquals( "org.apache.maven.plugins", pluginGroups.get( 0 ) ); + assertEquals( "org.codehaus.modello", pluginGroups.get( 1 ) ); + assertEquals( "org.codehaus.plexus", pluginGroups.get( 2 ) ); + } + +} Propchange: maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/components/trunk/maven-settings/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]