import org.apache.maven.archiva.common.utils.VersionComparator;
import org.apache.maven.archiva.common.utils.VersionUtil;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.maven.archiva.database.ArtifactDAO;
import org.apache.maven.archiva.indexer.RepositoryContentIndex;
import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.model.VersionedReference;
import org.apache.maven.archiva.repository.ContentNotFoundException;
import org.apache.maven.archiva.repository.ManagedRepositoryContent;
+import org.apache.maven.archiva.repository.RepositoryContentFactory;
+import org.apache.maven.archiva.repository.RepositoryException;
+import org.apache.maven.archiva.repository.RepositoryNotFoundException;
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.apache.maven.archiva.repository.metadata.MetadataTools;
import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
extends AbstractRepositoryPurge
{
private MetadataTools metadataTools;
+
+ private ArchivaConfiguration archivaConfig;
+
+ private RepositoryContentFactory repoContentFactory;
public CleanupReleasedSnapshotsRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
- MetadataTools metadataTools, Map<String, RepositoryContentIndex> indices )
+ MetadataTools metadataTools, Map<String, RepositoryContentIndex> indices,
+ ArchivaConfiguration archivaConfig, RepositoryContentFactory repoContentFactory )
{
super( repository, artifactDao, indices );
this.metadataTools = metadataTools;
+ this.archivaConfig = archivaConfig;
+ this.repoContentFactory = repoContentFactory;
}
public void process( String path )
ProjectReference reference = new ProjectReference();
reference.setGroupId( artifact.getGroupId() );
reference.setArtifactId( artifact.getArtifactId() );
-
+
// Gather up all of the versions.
List<String> allVersions = new ArrayList<String>( repository.getVersions( reference ) );
+ List<ManagedRepositoryConfiguration> repos = archivaConfig.getConfiguration().getManagedRepositories();
+ for( ManagedRepositoryConfiguration repo : repos )
+ {
+ if( repo.isReleases() && !repo.getId().equals( repository.getId() ) )
+ {
+ try
+ {
+ ManagedRepositoryContent repoContent = repoContentFactory.getManagedRepositoryContent( repo.getId() );
+ allVersions.addAll( repoContent.getVersions( reference ) );
+ }
+ catch( RepositoryNotFoundException e )
+ {
+ // swallow
+ }
+ catch( RepositoryException e )
+ {
+ // swallow
+ }
+ }
+ }
+
// Split the versions into released and snapshots.
List<String> releasedVersions = new ArrayList<String>();
List<String> snapshotVersions = new ArrayList<String>();
for ( String version : allVersions )
- {
+ {
if ( VersionUtil.isSnapshot( version ) )
{
snapshotVersions.add( version );
Collections.sort( allVersions, VersionComparator.getInstance() );
Collections.sort( releasedVersions, VersionComparator.getInstance() );
Collections.sort( snapshotVersions, VersionComparator.getInstance() );
-
- // Find out the highest released version.
- String highestReleasedVersion = allVersions.get( allVersions.size() - 1 );
-
+
// Now clean out any version that is earlier than the highest released version.
boolean needsMetadataUpdate = false;
for ( String version : snapshotVersions )
{
if( releasedVersions.contains( VersionUtil.getReleaseVersion( version ) ) )
- {
+ {
versionRef.setVersion( version );
repository.deleteVersion( versionRef );
needsMetadataUpdate = true;
repoPurge = new RetentionCountRepositoryPurge( repositoryContent, dao.getArtifactDAO(), repository
.getRetentionCount(), indices );
}
-
+
cleanUp = new CleanupReleasedSnapshotsRepositoryPurge( repositoryContent, dao.getArtifactDAO(),
- metadataTools, indices );
+ metadataTools, indices, configuration, repositoryFactory );
deleteReleasedSnapshots = repository.isDeleteReleasedSnapshots();
}
public static final String PATH_TO_BY_RETENTION_COUNT_POM = "org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom";
- public static final String PATH_TO_RELEASED_SNAPSHOT = "org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar";
-
- public static final String PATH_TO_HIGHER_SNAPSHOT_EXISTS = "org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar";
-
public static final String PATH_TO_TEST_ORDER_OF_DELETION = "org/apache/maven/plugins/maven-assembly-plugin/1.1.2-SNAPSHOT/maven-assembly-plugin-1.1.2-20070615.105019-3.jar";
+ protected static final String RELEASES_TEST_REPO_ID = "releases-test-repo-one";
+
+ protected static final String RELEASES_TEST_REPO_NAME = "Releases Test Repo One";
+
private ManagedRepositoryConfiguration config;
private ManagedRepositoryContent repo;
repo = null;
}
- public ManagedRepositoryConfiguration getRepoConfiguration()
+ public ManagedRepositoryConfiguration getRepoConfiguration( String repoId, String repoName )
{
- if ( config == null )
- {
- config = new ManagedRepositoryConfiguration();
- }
-
- config.setId( TEST_REPO_ID );
- config.setName( TEST_REPO_NAME );
+ config = new ManagedRepositoryConfiguration();
+ config.setId( repoId );
+ config.setName( repoName );
config.setDaysOlder( TEST_DAYS_OLDER );
- config.setLocation( getTestRepoRoot().getAbsolutePath() );
+ config.setLocation( getTestFile( "target/test-" + getName() + "/" + repoId ).getAbsolutePath() );
config.setReleases( true );
config.setSnapshots( true );
config.setDeleteReleasedSnapshots( true );
config.setRetentionCount( TEST_RETENTION_COUNT );
-
+
return config;
}
{
if ( repo == null )
{
- repo = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
- repo.setRepository( getRepoConfiguration() );
+ repo = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
+ repo.setRepository( getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ) );
}
return repo;
protected File getTestRepoRoot()
{
- return getTestFile( "target/test-" + getName() + "/test-repo" );
+ return getTestFile( "target/test-" + getName() + "/" + TEST_REPO_ID );
}
- protected String prepareTestRepo()
+ protected String prepareTestRepos()
throws IOException
{
File testDir = getTestRepoRoot();
FileUtils.deleteDirectory( testDir );
- FileUtils.copyDirectory( getTestFile( "target/test-classes/test-repo" ), testDir );
+ FileUtils.copyDirectory( getTestFile( "target/test-classes/" + TEST_REPO_ID ), testDir );
+
+ File releasesTestDir = getTestFile( "target/test-" + getName() + "/" + RELEASES_TEST_REPO_ID );
+ FileUtils.deleteDirectory( releasesTestDir );
+ FileUtils.copyDirectory( getTestFile( "target/test-classes/" + RELEASES_TEST_REPO_ID ), releasesTestDir );
return testDir.getAbsolutePath();
}
*/
import org.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexStub;
import org.apache.maven.archiva.database.ArchivaDatabaseException;
import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.repository.RepositoryContentFactory;
import org.apache.maven.archiva.repository.metadata.MetadataTools;
import org.custommonkey.xmlunit.XMLAssert;
*/
public class CleanupReleasedSnapshotsRepositoryPurgeTest
extends AbstractRepositoryPurgeTest
-{
+{
+ private ArchivaConfiguration archivaConfiguration;
+
+ public static final String PATH_TO_RELEASED_SNAPSHOT_IN_DIFF_REPO =
+ "org/apache/archiva/released-artifact-in-diff-repo/1.0-SNAPSHOT/released-artifact-in-diff-repo-1.0-SNAPSHOT.jar";
+
+ public static final String PATH_TO_HIGHER_SNAPSHOT_EXISTS_IN_SAME_REPO = "org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar";
+
+ public static final String PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO = "org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar";
+
protected void setUp()
throws Exception
{
- super.setUp();
+ super.setUp();
Map<String, RepositoryContentIndex> map = new HashMap<String, RepositoryContentIndex>();
map.put( "filecontent", new LuceneRepositoryContentIndexStub() );
map.put( "bytecode", new LuceneRepositoryContentIndexStub() );
MetadataTools metadataTools = (MetadataTools) lookup( MetadataTools.class );
+ RepositoryContentFactory factory = (RepositoryContentFactory) lookup( RepositoryContentFactory.class, "cleanup-released-snapshots");
- repoPurge = new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), dao, metadataTools, map );
+ archivaConfiguration =
+ (ArchivaConfiguration) lookup( ArchivaConfiguration.class, "cleanup-released-snapshots" );
+
+ repoPurge =
+ new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), dao, metadataTools, map, archivaConfiguration, factory );
}
- public void testReleasedSnapshots()
+ public void testReleasedSnapshotsExistsInSameRepo()
throws Exception
{
+
+ Configuration config = archivaConfiguration.getConfiguration();
+ config.removeManagedRepository( config.findManagedRepositoryById( TEST_REPO_ID ) );
+ config.addManagedRepository( getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ) );
+
populateReleasedSnapshotsTest();
- String repoRoot = prepareTestRepo();
-
+ String repoRoot = prepareTestRepos();
- repoPurge.process( PATH_TO_RELEASED_SNAPSHOT );
+ repoPurge.process( CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO );
String projectRoot = repoRoot + "/org/apache/maven/plugins/maven-plugin-plugin";
"//metadata/versioning/versions/version", metadataXml );
XMLAssert.assertXpathEvaluatesTo( "20070315032817", "//metadata/versioning/lastUpdated", metadataXml );
}
+
+ public void testReleasedSnapshotsExistsInDifferentRepo()
+ throws Exception
+ {
+ Configuration config = archivaConfiguration.getConfiguration();
+ config.removeManagedRepository( config.findManagedRepositoryById( TEST_REPO_ID ) );
+ config.addManagedRepository( getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ) );
+ config.addManagedRepository( getRepoConfiguration( RELEASES_TEST_REPO_ID, RELEASES_TEST_REPO_NAME ) );
+
+ populateReleasedSnapshotsTestInDiffRepo();
+
+ String repoRoot = prepareTestRepos();
+
+ repoPurge.process( PATH_TO_RELEASED_SNAPSHOT_IN_DIFF_REPO );
+
+ String projectRoot = repoRoot + "/org/apache/archiva/released-artifact-in-diff-repo";
+
+ // check if the snapshot was removed
+ assertDeleted( projectRoot + "/1.0-SNAPSHOT" );
+ assertDeleted( projectRoot + "/1.0-SNAPSHOT/released-artifact-in-diff-repo-1.0-SNAPSHOT.jar" );
+ assertDeleted( projectRoot + "/1.0-SNAPSHOT/released-artifact-in-diff-repo-1.0-SNAPSHOT.jar.md5" );
+ assertDeleted( projectRoot + "/1.0-SNAPSHOT/released-artifact-in-diff-repo-1.0-SNAPSHOT.jar.sha1" );
+ assertDeleted( projectRoot + "/1.0-SNAPSHOT/released-artifact-in-diff-repo-1.0-SNAPSHOT.pom" );
+ assertDeleted( projectRoot + "/1.0-SNAPSHOT/released-artifact-in-diff-repo-1.0-SNAPSHOT.pom.md5" );
+ assertDeleted( projectRoot + "/1.0-SNAPSHOT/released-artifact-in-diff-repo-1.0-SNAPSHOT.pom.sha1" );
+
+ String releasesProjectRoot =
+ getTestFile( "target/test-" + getName() + "/releases-test-repo-one" ).getAbsolutePath() +
+ "/org/apache/archiva/released-artifact-in-diff-repo";
+
+ // check if the released version was not removed
+ assertExists( releasesProjectRoot + "/1.0" );
+ assertExists( releasesProjectRoot + "/1.0/released-artifact-in-diff-repo-1.0.jar" );
+ assertExists( releasesProjectRoot + "/1.0/released-artifact-in-diff-repo-1.0.jar.md5" );
+ assertExists( releasesProjectRoot + "/1.0/released-artifact-in-diff-repo-1.0.jar.sha1" );
+ assertExists( releasesProjectRoot + "/1.0/released-artifact-in-diff-repo-1.0.pom" );
+ assertExists( releasesProjectRoot + "/1.0/released-artifact-in-diff-repo-1.0.pom.md5" );
+ assertExists( releasesProjectRoot + "/1.0/released-artifact-in-diff-repo-1.0.pom.sha1" );
+ }
- public void testHigherSnapshotExists()
+ public void testHigherSnapshotExistsInSameRepo()
throws Exception
- {
+ {
+ Configuration config = archivaConfiguration.getConfiguration();
+ config.removeManagedRepository( config.findManagedRepositoryById( TEST_REPO_ID ) );
+ config.addManagedRepository( getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ) );
+
populateHigherSnapshotExistsTest();
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
- repoPurge.process( PATH_TO_HIGHER_SNAPSHOT_EXISTS );
+ repoPurge.process( CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_HIGHER_SNAPSHOT_EXISTS_IN_SAME_REPO );
String projectRoot = repoRoot + "/org/apache/maven/plugins/maven-source-plugin";
"//metadata/versioning/versions/version", metadataXml );
XMLAssert.assertXpathEvaluatesTo( "20070427033345", "//metadata/versioning/lastUpdated", metadataXml );
}
-
+
private void populateReleasedSnapshotsTest()
throws ArchivaDatabaseException
{
populateDb( "org.apache.maven.plugins", "maven-source-plugin", versions );
}
+
+ private void populateReleasedSnapshotsTestInDiffRepo()
+ throws ArchivaDatabaseException
+ {
+ List<String> versions = new ArrayList<String>();
+ versions.add( "1.0-SNAPSHOT" );
+
+ populateDb( "org.apache.archiva", "released-artifact-in-diff-repo", versions );
+ }
}
map.put( "bytecode", new LuceneRepositoryContentIndexStub( 2 ) );
repoPurge =
- new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration().getDaysOlder(),
- getRepoConfiguration().getRetentionCount(), map );
+ new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ).getDaysOlder(),
+ getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ).getRetentionCount(), map );
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
String projectRoot = repoRoot + "/org/apache/maven/plugins/maven-install-plugin";
map.put( "bytecode", new LuceneRepositoryContentIndexStub( 2 ) );
repoPurge =
- new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration().getDaysOlder(),
- getRepoConfiguration().getRetentionCount(), map );
+ new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ).getDaysOlder(),
+ getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ).getRetentionCount(), map );
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
String projectRoot = repoRoot + "/org/apache/maven/plugins/maven-assembly-plugin";
map.put( "bytecode", new LuceneRepositoryContentIndexStub( 2 ) );
repoPurge =
- new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration().getDaysOlder(),
- getRepoConfiguration().getRetentionCount(), map );
+ new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ).getDaysOlder(),
+ getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ).getRetentionCount(), map );
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
String versionRoot = repoRoot + "/org/codehaus/plexus/plexus-utils/1.4.3-SNAPSHOT";
File[] contents = dir.listFiles();
for ( int i = 0; i < contents.length; i++ )
{
- contents[i].setLastModified( 1179382029 );
+ contents[i].setLastModified( 1179382029 );
}
}
populateDbForRetentionCountTest();
- ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
+ ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
repoConfiguration.setDaysOlder( 0 ); // force days older off to allow retention count purge to execute.
repoConfiguration.setRetentionCount( TEST_RETENTION_COUNT );
addRepoToConfiguration( "retention-count", repoConfiguration );
repoPurgeConsumer.beginScan( repoConfiguration, null );
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
repoPurgeConsumer.processFile( PATH_TO_BY_RETENTION_COUNT_ARTIFACT );
( (RepositoryPurgeConsumer) repoPurgeConsumer ).setRepositoryContentIndexFactory( indexFactory );
- ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
+ ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
repoConfiguration.setDaysOlder( TEST_DAYS_OLDER );
addRepoToConfiguration( "days-old", repoConfiguration );
repoPurgeConsumer.beginScan( repoConfiguration, null );
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
String projectRoot = repoRoot + "/org/apache/maven/plugins/maven-install-plugin";
setLastModified( projectRoot + "/2.2-SNAPSHOT" );
populateDbForReleasedSnapshotsTest();
- ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
+ ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
repoConfiguration.setDeleteReleasedSnapshots( false ); // Set to NOT delete released snapshots.
addRepoToConfiguration( "retention-count", repoConfiguration );
repoPurgeConsumer.beginScan( repoConfiguration, null );
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
- repoPurgeConsumer.processFile( PATH_TO_RELEASED_SNAPSHOT );
+ repoPurgeConsumer.processFile( CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO );
// check if the snapshot wasn't removed
String projectRoot = repoRoot + "/org/apache/maven/plugins/maven-plugin-plugin";
populateDbForReleasedSnapshotsTest();
- ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration();
+ ManagedRepositoryConfiguration repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
repoConfiguration.setDeleteReleasedSnapshots( true );
addRepoToConfiguration( "days-old", repoConfiguration );
repoPurgeConsumer.beginScan( repoConfiguration, null );
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
- repoPurgeConsumer.processFile( PATH_TO_RELEASED_SNAPSHOT );
+ repoPurgeConsumer.processFile( CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO );
String projectRoot = repoRoot + "/org/apache/maven/plugins/maven-plugin-plugin";
{
List<String> versions = new ArrayList<String>();
versions.add( "1.0RC1-20070504.153317-1" );
- versions.add( "1.0RC1-20070504.160758-2" );
+ versions.add( "1.0RC1-20070504.160758-2" );
versions.add( "1.0RC1-20070505.090015-3" );
versions.add( "1.0RC1-20070506.090132-4" );
map.put( "bytecode", new LuceneRepositoryContentIndexStub( 2 ) );
repoPurge = new RetentionCountRepositoryPurge( getRepository(), dao,
- getRepoConfiguration().getRetentionCount(), map );
+ getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ).getRetentionCount(), map );
}
/**
{
populateIfJarWasFoundDb();
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
repoPurge.process( PATH_TO_BY_RETENTION_COUNT_ARTIFACT );
{
populateIfPomWasFoundDb();
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
repoPurge.process( PATH_TO_BY_RETENTION_COUNT_POM );
{
populateDbForTestOrderOfDeletion();
- String repoRoot = prepareTestRepo();
+ String repoRoot = prepareTestRepos();
repoPurge.process( PATH_TO_TEST_ORDER_OF_DELETION );
</otherProperties>
</configuration>
</component>
+
+ <component>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>cleanup-released-snapshots</role-hint>
+ <implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
+ <requirements>
+ <requirement>
+ <role>org.codehaus.plexus.registry.Registry</role>
+ <role-hint>cleanup-released-snapshots</role-hint>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.archiva.policies.PreDownloadPolicy</role>
+ <field-name>prePolicies</field-name>
+ </requirement>
+ <requirement>
+ <role>org.apache.maven.archiva.policies.PostDownloadPolicy</role>
+ <field-name>postPolicies</field-name>
+ </requirement>
+ </requirements>
+ </component>
+
+ <component>
+ <role>org.codehaus.plexus.registry.Registry</role>
+ <role-hint>cleanup-released-snapshots</role-hint>
+ <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+ <configuration>
+ <properties>
+ <xml fileName="${basedir}/src/test/conf/repository-manager.xml"
+ config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+ </properties>
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.apache.maven.archiva.repository.RepositoryContentFactory</role>
+ <role-hint>cleanup-released-snapshots</role-hint>
+ <implementation>org.apache.maven.archiva.repository.RepositoryContentFactory</implementation>
+ <description>RepositoryContentRequest</description>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>cleanup-released-snapshots</role-hint>
+ <field-name>archivaConfiguration</field-name>
+ </requirement>
+ </requirements>
+ </component>
</components>
</component-set>