diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java index d8540a62a1..9d0dd91276 100644 --- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java +++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/metadata/AbstractVersionArtifactMetadata.java @@ -110,4 +110,14 @@ public Date getLastModified() { return new Date( lastModified ); } + + public Object getKey() + { + return "legacy " + artifact.getGroupId() + ":" + artifact.getArtifactId(); + } + + public void merge( ArtifactMetadata metadata ) + { + throw new IllegalStateException( "Cannot add two pieces of metadata for: " + getKey() ); + } } diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java index 2aeea8a06a..2fcc5d5ad4 100644 --- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java +++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java @@ -16,11 +16,22 @@ * limitations under the License. */ +import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; +import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; +import java.io.Reader; +import java.io.Writer; /** * Shared methods of the repository metadata handling. @@ -31,6 +42,13 @@ public abstract class AbstractRepositoryMetadata implements ArtifactMetadata { + private Metadata metadata; + + protected AbstractRepositoryMetadata( Metadata metadata ) + { + this.metadata = metadata; + } + public String getRemoteFilename() { return "maven-metadata.xml"; @@ -54,7 +72,114 @@ public void storeInLocalRepository( ArtifactRepository localRepository, Artifact } } - protected abstract void updateRepositoryMetadata( ArtifactRepository localRepository, - ArtifactRepository remoteRepository ) - throws IOException; + protected void updateRepositoryMetadata( ArtifactRepository localRepository, ArtifactRepository remoteRepository ) + throws IOException + { + MetadataXpp3Reader mappingReader = new MetadataXpp3Reader(); + + Metadata metadata = null; + + File metadataFile = new File( localRepository.getBasedir(), + localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) ); + + if ( metadataFile.exists() ) + { + Reader reader = null; + + try + { + reader = new FileReader( metadataFile ); + + metadata = mappingReader.read( reader ); + } + catch ( FileNotFoundException e ) + { + // TODO: Log a warning + } + catch ( IOException e ) + { + // TODO: Log a warning + } + catch ( XmlPullParserException e ) + { + // TODO: Log a warning + } + finally + { + IOUtil.close( reader ); + } + } + + boolean changed = false; + + // If file could not be found or was not valid, start from scratch + if ( metadata == null ) + { + metadata = new Metadata(); + + metadata.setGroupId( getGroupId() ); + metadata.setArtifactId( getArtifactId() ); + metadata.setVersion( getBaseVersion() ); + + changed = true; + } + + changed |= metadata.merge( this.metadata ); + + if ( changed ) + { + Writer writer = null; + try + { + metadataFile.getParentFile().mkdirs(); + writer = new FileWriter( metadataFile ); + + MetadataXpp3Writer mappingWriter = new MetadataXpp3Writer(); + + mappingWriter.write( writer, metadata ); + } + finally + { + IOUtil.close( writer ); + } + } + else + { + metadataFile.setLastModified( System.currentTimeMillis() ); + } + } + + public String toString() + { + return "repository metadata for: \'" + getKey() + "\'"; + } + + protected static Metadata createMetadata( Artifact artifact, Versioning versioning ) + { + Metadata metadata = new Metadata(); + metadata.setGroupId( artifact.getGroupId() ); + metadata.setArtifactId( artifact.getArtifactId() ); + metadata.setVersion( artifact.getVersion() ); + metadata.setVersioning( versioning ); + return metadata; + } + + protected static Versioning createVersioning( Snapshot snapshot ) + { + Versioning versioning = new Versioning(); + versioning.setSnapshot( snapshot ); + return versioning; + } + + protected Metadata getMetadata() + { + return metadata; + } + + public void merge( ArtifactMetadata metadata ) + { + // TODO: not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact replaces? + AbstractRepositoryMetadata repoMetadata = (AbstractRepositoryMetadata) metadata; + this.metadata.merge( repoMetadata.getMetadata() ); + } } diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java index 532e1b3b07..ac14ef380d 100644 --- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java +++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java @@ -17,20 +17,6 @@ */ import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Reader; -import java.io.Writer; -import java.util.Iterator; /** * Metadata for the artifact directory of the repository. @@ -42,26 +28,19 @@ public class ArtifactRepositoryMetadata extends AbstractRepositoryMetadata { - private Versioning versioning; - private Artifact artifact; public ArtifactRepositoryMetadata( Artifact artifact ) { - this.artifact = artifact; + this( artifact, null ); } public ArtifactRepositoryMetadata( Artifact artifact, Versioning versioning ) { - this.versioning = versioning; + super( createMetadata( artifact, versioning ) ); this.artifact = artifact; } - public String toString() - { - return "repository metadata for: \'" + getKey() + "\'"; - } - public boolean storedInGroupDirectory() { return false; @@ -84,127 +63,19 @@ public String getArtifactId() public String getBaseVersion() { + // Don't want the artifact's version in here, as this is stored in the directory above that return null; } - protected void updateRepositoryMetadata( ArtifactRepository localRepository, ArtifactRepository remoteRepository ) - throws IOException - { - MetadataXpp3Reader mappingReader = new MetadataXpp3Reader(); - - Metadata metadata = null; - - File metadataFile = new File( localRepository.getBasedir(), - localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) ); - - if ( metadataFile.exists() ) - { - Reader reader = null; - - try - { - reader = new FileReader( metadataFile ); - - metadata = mappingReader.read( reader ); - } - catch ( FileNotFoundException e ) - { - // TODO: Log a warning - } - catch ( IOException e ) - { - // TODO: Log a warning - } - catch ( XmlPullParserException e ) - { - // TODO: Log a warning - } - finally - { - IOUtil.close( reader ); - } - } - - boolean changed = false; - - // If file could not be found or was not valid, start from scratch - if ( metadata == null ) - { - metadata = new Metadata(); - - metadata.setGroupId( artifact.getGroupId() ); - metadata.setArtifactId( artifact.getArtifactId() ); - changed = true; - } - - if ( versioning != null ) - { - Versioning v = metadata.getVersioning(); - if ( v != null ) - { - if ( versioning.getRelease() != null ) - { - changed = true; - v.setRelease( versioning.getRelease() ); - } - if ( versioning.getLatest() != null ) - { - changed = true; - v.setLatest( versioning.getLatest() ); - } - for ( Iterator i = versioning.getVersions().iterator(); i.hasNext(); ) - { - String version = (String) i.next(); - if ( !v.getVersions().contains( version ) ) - { - changed = true; - v.getVersions().add( version ); - } - } - } - else - { - metadata.setVersioning( versioning ); - changed = true; - } - } - - if ( changed ) - { - Writer writer = null; - try - { - metadataFile.getParentFile().mkdirs(); - writer = new FileWriter( metadataFile ); - - MetadataXpp3Writer mappingWriter = new MetadataXpp3Writer(); - - mappingWriter.write( writer, metadata ); - } - finally - { - IOUtil.close( writer ); - } - } - else - { - metadataFile.setLastModified( System.currentTimeMillis() ); - } - } - public Object getKey() { - return artifact.getGroupId() + ":" + artifact.getArtifactId(); + return "artifact " + artifact.getGroupId() + ":" + artifact.getArtifactId(); } public boolean isSnapshot() { - return artifact.isSnapshot(); - } - - public Snapshot getSnapshot() - { - return null; + // Don't consider the artifact's version in here, as this is stored in the directory above that + return false; } } diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java index 502a7cbe59..098cc8ca6e 100644 --- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java +++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java @@ -16,22 +16,8 @@ * limitations under the License. */ -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Reader; -import java.io.Writer; -import java.util.HashMap; import java.util.Iterator; -import java.util.Map; +import java.util.List; /** * Metadata for the group directory of the repository. @@ -44,18 +30,12 @@ public class GroupRepositoryMetadata { private final String groupId; - private Map pluginMappings = new HashMap(); - public GroupRepositoryMetadata( String groupId ) { + super( new Metadata() ); this.groupId = groupId; } - public String toString() - { - return "repository metadata for group: \'" + groupId + "\'"; - } - public boolean storedInGroupDirectory() { return true; @@ -83,110 +63,23 @@ public String getBaseVersion() public void addPluginMapping( String goalPrefix, String artifactId ) { - pluginMappings.put( goalPrefix, artifactId ); - } - - protected void updateRepositoryMetadata( ArtifactRepository localRepository, ArtifactRepository remoteRepository ) - throws IOException - { - MetadataXpp3Reader mappingReader = new MetadataXpp3Reader(); - - Metadata pluginMap = null; - - File metadataFile = new File( localRepository.getBasedir(), - localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) ); - - if ( metadataFile.exists() ) + List plugins = getMetadata().getPlugins(); + boolean found = false; + for ( Iterator i = plugins.iterator(); i.hasNext() && !found; ) { - Reader reader = null; - - try + Plugin plugin = (Plugin) i.next(); + if ( plugin.getPrefix().equals( goalPrefix ) ) { - reader = new FileReader( metadataFile ); - - pluginMap = mappingReader.read( reader ); - } - catch ( FileNotFoundException e ) - { - // TODO: Log a warning - } - catch ( IOException e ) - { - // TODO: Log a warning - } - catch ( XmlPullParserException e ) - { - // TODO: Log a warning - } - finally - { - IOUtil.close( reader ); + found = true; } } - - boolean changed = false; - - // If file could not be found or was not valid, start from scratch - if ( pluginMap == null ) + if ( !found ) { - pluginMap = new Metadata(); + Plugin plugin = new Plugin(); + plugin.setPrefix( goalPrefix ); + plugin.setArtifactId( artifactId ); - pluginMap.setGroupId( groupId ); - - changed = true; - } - - for ( Iterator i = pluginMappings.keySet().iterator(); i.hasNext(); ) - { - String prefix = (String) i.next(); - boolean found = false; - - for ( Iterator it = pluginMap.getPlugins().iterator(); it.hasNext() && !found; ) - { - Plugin preExisting = (Plugin) it.next(); - - if ( preExisting.getPrefix().equals( prefix ) ) - { - // TODO: log -// getLog().info( "Plugin-mapping metadata for prefix: " + prefix + " already exists. Skipping." ); - - found = true; - } - } - - if ( !found ) - { - Plugin mappedPlugin = new Plugin(); - - mappedPlugin.setArtifactId( (String) pluginMappings.get( prefix ) ); - - mappedPlugin.setPrefix( prefix ); - - pluginMap.addPlugin( mappedPlugin ); - - changed = true; - } - } - - if ( changed ) - { - Writer writer = null; - try - { - writer = new FileWriter( metadataFile ); - - MetadataXpp3Writer mappingWriter = new MetadataXpp3Writer(); - - mappingWriter.write( writer, pluginMap ); - } - finally - { - IOUtil.close( writer ); - } - } - else - { - metadataFile.setLastModified( System.currentTimeMillis() ); + getMetadata().addPlugin( plugin ); } } diff --git a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java index f4ee9e5547..b9dbec0cde 100644 --- a/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java +++ b/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java @@ -17,19 +17,6 @@ */ import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Reader; -import java.io.Writer; /** * Metadata for the artifact version directory of the repository. @@ -41,27 +28,19 @@ public class SnapshotArtifactRepositoryMetadata extends AbstractRepositoryMetadata { - private Snapshot snapshot; - private Artifact artifact; public SnapshotArtifactRepositoryMetadata( Artifact artifact ) { - this.artifact = artifact; - this.snapshot = new Snapshot(); + this( artifact, new Snapshot() ); } public SnapshotArtifactRepositoryMetadata( Artifact artifact, Snapshot snapshot ) { - this.snapshot = snapshot; + super( createMetadata( artifact, createVersioning( snapshot ) ) ); this.artifact = artifact; } - public String toString() - { - return "repository metadata for: \'" + getKey() + "\'"; - } - public boolean storedInGroupDirectory() { return false; @@ -87,117 +66,13 @@ public String getBaseVersion() return artifact.getBaseVersion(); } - protected void updateRepositoryMetadata( ArtifactRepository localRepository, ArtifactRepository remoteRepository ) - throws IOException - { - MetadataXpp3Reader mappingReader = new MetadataXpp3Reader(); - - Metadata metadata = null; - - File metadataFile = new File( localRepository.getBasedir(), - localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) ); - - if ( metadataFile.exists() ) - { - Reader reader = null; - - try - { - reader = new FileReader( metadataFile ); - - metadata = mappingReader.read( reader ); - } - catch ( FileNotFoundException e ) - { - // TODO: Log a warning - } - catch ( IOException e ) - { - // TODO: Log a warning - } - catch ( XmlPullParserException e ) - { - // TODO: Log a warning - } - finally - { - IOUtil.close( reader ); - } - } - - boolean changed = false; - - // If file could not be found or was not valid, start from scratch - if ( metadata == null ) - { - metadata = new Metadata(); - - metadata.setGroupId( artifact.getGroupId() ); - metadata.setArtifactId( artifact.getArtifactId() ); - changed = true; - } - - if ( snapshot != null ) - { - Versioning v = metadata.getVersioning(); - if ( v == null ) - { - v = new Versioning(); - metadata.setVersioning( v ); - } - - Snapshot s = v.getSnapshot(); - if ( s == null ) - { - v.setSnapshot( snapshot ); - changed = true; - } - else - { - if ( s.getTimestamp() != null && !s.getTimestamp().equals( snapshot.getTimestamp() ) ) - { - s.setTimestamp( snapshot.getTimestamp() ); - changed = true; - } - if ( s.getBuildNumber() != snapshot.getBuildNumber() ) - { - s.setBuildNumber( snapshot.getBuildNumber() ); - changed = true; - } - } - } - - if ( changed ) - { - Writer writer = null; - try - { - metadataFile.getParentFile().mkdirs(); - writer = new FileWriter( metadataFile ); - - MetadataXpp3Writer mappingWriter = new MetadataXpp3Writer(); - - mappingWriter.write( writer, metadata ); - } - finally - { - IOUtil.close( writer ); - } - } - else - { - metadataFile.setLastModified( System.currentTimeMillis() ); - } - } - public Object getKey() { - return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getBaseVersion(); + return "snapshot " + artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getBaseVersion(); } public boolean isSnapshot() { return artifact.isSnapshot(); } - } diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java b/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java index 32e0ad180f..b250937e8c 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java @@ -23,6 +23,7 @@ import org.apache.maven.artifact.versioning.VersionRange; import java.io.File; +import java.util.Collection; import java.util.List; import java.util.regex.Pattern; @@ -95,7 +96,7 @@ public interface Artifact void addMetadata( ArtifactMetadata metadata ); - List getMetadataList(); + Collection getMetadataList(); void setRepository( ArtifactRepository remoteRepository ); diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java index 115a2d3410..4bee7a332f 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java @@ -24,9 +24,11 @@ import org.codehaus.plexus.util.StringUtils; import java.io.File; -import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; /** @@ -54,8 +56,6 @@ public class DefaultArtifact private String scope; - private List metadataList; - private File file; private ArtifactRepository repository; @@ -74,10 +74,12 @@ public class DefaultArtifact private boolean resolved; - private boolean release = false; + private boolean release; private List availableVersions; + private Map metadataMap; + public DefaultArtifact( String groupId, String artifactId, VersionRange versionRange, String scope, String type, String classifier, ArtifactHandler artifactHandler ) { @@ -213,16 +215,25 @@ public String getDependencyConflictId() public void addMetadata( ArtifactMetadata metadata ) { - if ( metadataList == null ) + if ( metadataMap == null ) { - metadataList = new ArrayList(); + metadataMap = new HashMap(); + } + + ArtifactMetadata m = (ArtifactMetadata) metadataMap.get( metadata.getKey() ); + if ( m != null ) + { + m.merge( metadata ); + } + else + { + metadataMap.put( metadata.getKey(), metadata ); } - metadataList.add( metadata ); } - public List getMetadataList() + public Collection getMetadataList() { - return metadataList == null ? Collections.EMPTY_LIST : metadataList; + return metadataMap == null ? Collections.EMPTY_LIST : metadataMap.values(); } // ---------------------------------------------------------------------- diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java index e2ccf2e6f8..eae953b802 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java @@ -53,10 +53,4 @@ public String getVersion() { return artifact.getVersion(); } - - public Object getKey() - { - return artifact.getGroupId() + ":" + artifact.getArtifactId(); - } - } diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java index b9b051415b..19be825303 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java @@ -73,4 +73,10 @@ void storeInLocalRepository( ArtifactRepository localRepository, ArtifactReposit */ String getRemoteFilename(); + /** + * Merge a new metadata set into this piece of metadata. + * + * @param metadata the new metadata + */ + void merge( ArtifactMetadata metadata ); } diff --git a/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java b/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java index 0d41e28a8d..dacbb478cf 100644 --- a/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java +++ b/maven-project/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java @@ -25,6 +25,7 @@ import org.apache.maven.project.MavenProject; import java.io.File; +import java.util.Collection; import java.util.List; /** @@ -131,7 +132,7 @@ public void addMetadata( ArtifactMetadata metadata ) artifact.addMetadata( metadata ); } - public List getMetadataList() + public Collection getMetadataList() { return artifact.getMetadataList(); } diff --git a/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java b/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java index ccac0e2ddc..6d83f7e3ed 100644 --- a/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java +++ b/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java @@ -19,6 +19,7 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactStatus; import org.apache.maven.artifact.metadata.AbstractArtifactMetadata; +import org.apache.maven.artifact.metadata.ArtifactMetadata; import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.model.DistributionManagement; @@ -146,4 +147,17 @@ public boolean isSnapshot() return artifact.isSnapshot(); } + public Object getKey() + { + return "project " + artifact.getGroupId() + ":" + artifact.getArtifactId(); + } + + public void merge( ArtifactMetadata metadata ) + { + ProjectArtifactMetadata m = (ProjectArtifactMetadata) metadata; + if ( !m.file.equals( file ) ) + { + throw new IllegalStateException( "Cannot add two different pieces of metadata for: " + getKey() ); + } + } } diff --git a/maven-repository-metadata/src/main/mdo/metadata.mdo b/maven-repository-metadata/src/main/mdo/metadata.mdo index cdf5de5bdd..748f5c87ad 100644 --- a/maven-repository-metadata/src/main/mdo/metadata.mdo +++ b/maven-repository-metadata/src/main/mdo/metadata.mdo @@ -49,6 +49,104 @@ + + + 1.0.0 + + + Versioning