From 34638d4e678a6a005be1072aacbecd8b3cd2af0f Mon Sep 17 00:00:00 2001
From: Brett Porter
* Support Files are things like ".sha1", ".md5", ".asc", etc.
*
* So, if you have the following (presented in the m2/default layout form) ... *
@@ -71,9 +71,9 @@ public class CleanupReleasedSnapshotsRepositoryPurge extends AbstractRepositoryPurge { private MetadataTools metadataTools; - + private ArchivaConfiguration archivaConfig; - + private RepositoryContentFactory repoContentFactory; public CleanupReleasedSnapshotsRepositoryPurge( ManagedRepositoryContent repository, MetadataTools metadataTools, @@ -111,25 +111,26 @@ public class CleanupReleasedSnapshotsRepositoryPurge ProjectReference reference = new ProjectReference(); reference.setGroupId( artifactRef.getGroupId() ); reference.setArtifactId( artifactRef.getArtifactId() ); - + // Gather up all of the versions. ListallVersions = new ArrayList ( repository.getVersions( reference ) ); List repos = archivaConfig.getConfiguration().getManagedRepositories(); - for( ManagedRepositoryConfiguration repo : repos ) - { - if( repo.isReleases() && !repo.getId().equals( repository.getId() ) ) - { + for ( ManagedRepositoryConfiguration repo : repos ) + { + if ( repo.isReleases() && !repo.getId().equals( repository.getId() ) ) + { try - { - ManagedRepositoryContent repoContent = repoContentFactory.getManagedRepositoryContent( repo.getId() ); + { + ManagedRepositoryContent repoContent = repoContentFactory.getManagedRepositoryContent( + repo.getId() ); allVersions.addAll( repoContent.getVersions( reference ) ); } - catch( RepositoryNotFoundException e ) + catch ( RepositoryNotFoundException e ) { // swallow } - catch( RepositoryException e ) + catch ( RepositoryException e ) { // swallow } @@ -141,7 +142,7 @@ public class CleanupReleasedSnapshotsRepositoryPurge List snapshotVersions = new ArrayList (); for ( String version : allVersions ) - { + { if ( VersionUtil.isSnapshot( version ) ) { snapshotVersions.add( version ); @@ -155,36 +156,36 @@ public class CleanupReleasedSnapshotsRepositoryPurge Collections.sort( allVersions, VersionComparator.getInstance() ); Collections.sort( releasedVersions, VersionComparator.getInstance() ); Collections.sort( snapshotVersions, VersionComparator.getInstance() ); - + // Now clean out any version that is earlier than the highest released version. boolean needsMetadataUpdate = false; VersionedReference versionRef = new VersionedReference(); versionRef.setGroupId( artifactRef.getGroupId() ); versionRef.setArtifactId( artifactRef.getArtifactId() ); - - ArchivaArtifact artifact = - new ArchivaArtifact( artifactRef.getGroupId(), artifactRef.getArtifactId(), artifactRef.getVersion(), - artifactRef.getClassifier(), artifactRef.getType(), repository.getId() ); - + + ArchivaArtifact artifact = new ArchivaArtifact( artifactRef.getGroupId(), artifactRef.getArtifactId(), + artifactRef.getVersion(), artifactRef.getClassifier(), + artifactRef.getType(), repository.getId() ); + for ( String version : snapshotVersions ) - { - if( releasedVersions.contains( VersionUtil.getReleaseVersion( version ) ) ) - { + { + if ( releasedVersions.contains( VersionUtil.getReleaseVersion( version ) ) ) + { versionRef.setVersion( version ); repository.deleteVersion( versionRef ); - - // TODO: looks incomplete, might not delete related metadata? + + // FIXME: looks incomplete, might not delete related metadata? for ( RepositoryListener listener : listeners ) { listener.deleteArtifact( repository.getId(), artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifactFile.getName() ); } - + needsMetadataUpdate = true; } - } - + } + if ( needsMetadataUpdate ) { updateMetadata( artifactRef ); diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java index 3d367b422..8948f0f64 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java @@ -86,7 +86,8 @@ public class ArchivaMetadataCreationConsumer private MetadataRepository metadataRepository; /** - * FIXME: this needs to be configurable based on storage type + * FIXME: this needs to be configurable based on storage type - and could also be instantiated per repo. Change to a + * factory. * * @plexus.requirement role-hint="maven2" */ @@ -148,7 +149,7 @@ public class ArchivaMetadataCreationConsumer project.setId( artifact.getProject() ); String projectVersion = VersionUtil.getBaseVersion( artifact.getVersion() ); - // TODO: maybe not too efficient since it may have already been read and stored for this artifact + // FIXME: maybe not too efficient since it may have already been read and stored for this artifact ProjectVersionMetadata versionMetadata = null; try { @@ -172,7 +173,7 @@ public class ArchivaMetadataCreationConsumer try { - // TODO: transaction + // FIXME: transaction // read the metadata and update it if it is newer or doesn't exist artifact.setWhenGathered( whenGathered ); metadataRepository.updateArtifact( repoId, project.getNamespace(), project.getId(), projectVersion, diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/IndexingArchivaTaskScheduler.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/IndexingArchivaTaskScheduler.java index d5d92f3b8..a0280ee53 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/IndexingArchivaTaskScheduler.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/IndexingArchivaTaskScheduler.java @@ -28,15 +28,14 @@ import org.slf4j.LoggerFactory; /** * Default implementation of a scheduling component for archiva. * - * @todo FIXME - consider just folding in, not really scheduled - * + * @todo TODO - consider just folding in, not really scheduled * @plexus.component role="org.apache.archiva.scheduler.ArchivaTaskScheduler" role-hint="indexing" */ public class IndexingArchivaTaskScheduler implements ArchivaTaskScheduler { private Logger log = LoggerFactory.getLogger( IndexingArchivaTaskScheduler.class ); - + /** * @plexus.requirement role-hint="indexing" */ diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java index 06b32a85f..c3a44ac2b 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java @@ -148,7 +148,7 @@ public class ArchivaRepositoryScanningTaskExecutorTest RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 0, newStats.getNewFileCount() ); assertEquals( 31, newStats.getTotalFileCount() ); - // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation + // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation // assertEquals( 8, newStats.getTotalArtifactCount() ); // assertEquals( 3, newStats.getTotalGroupCount() ); // assertEquals( 5, newStats.getTotalProjectCount() ); @@ -179,7 +179,7 @@ public class ArchivaRepositoryScanningTaskExecutorTest RepositoryStatistics updatedStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 2, updatedStats.getNewFileCount() ); assertEquals( 33, updatedStats.getTotalFileCount() ); - // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation + // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation // assertEquals( 8, newStats.getTotalArtifactCount() ); // assertEquals( 3, newStats.getTotalGroupCount() ); // assertEquals( 5, newStats.getTotalProjectCount() ); @@ -223,7 +223,7 @@ public class ArchivaRepositoryScanningTaskExecutorTest RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 2, newStats.getNewFileCount() ); assertEquals( 33, newStats.getTotalFileCount() ); - // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation + // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation // assertEquals( 8, newStats.getTotalArtifactCount() ); // assertEquals( 3, newStats.getTotalGroupCount() ); // assertEquals( 5, newStats.getTotalProjectCount() ); @@ -267,7 +267,7 @@ public class ArchivaRepositoryScanningTaskExecutorTest RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 2, newStats.getNewFileCount() ); assertEquals( 33, newStats.getTotalFileCount() ); - // TODO: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation + // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation // assertEquals( 8, newStats.getTotalArtifactCount() ); // assertEquals( 3, newStats.getTotalGroupCount() ); // assertEquals( 5, newStats.getTotalProjectCount() ); diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/security/UserRepositoriesStub.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/security/UserRepositoriesStub.java index c73e2090a..dc7cf00df 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/security/UserRepositoriesStub.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/security/UserRepositoriesStub.java @@ -23,7 +23,7 @@ import java.util.Collections; import java.util.List; /** - * UserRepositories stub used for testing. + * UserRepositories stub used for testing. * * @version $Id$ */ @@ -35,37 +35,33 @@ public class UserRepositoriesStub public void createMissingRepositoryRoles( String repoId ) throws ArchivaSecurityException { - // TODO Auto-generated method stub - } public List getObservableRepositoryIds( String principal ) - throws PrincipalNotFoundException, AccessDeniedException, ArchivaSecurityException + throws ArchivaSecurityException { return repoIds; } public void setObservableRepositoryIds( List repoIds ) { - this.repoIds = repoIds; + this.repoIds = repoIds; } public boolean isAuthorizedToUploadArtifacts( String principal, String repoId ) - throws PrincipalNotFoundException, ArchivaSecurityException + throws ArchivaSecurityException { - // TODO Auto-generated method stub return false; } - + public boolean isAuthorizedToDeleteArtifacts( String principal, String repoId ) { return false; } public List getManagableRepositoryIds( String principal ) - throws PrincipalNotFoundException, AccessDeniedException, ArchivaSecurityException + throws ArchivaSecurityException { - // TODO Auto-generated method stub return null; } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/rss/SecuritySystemStub.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/rss/SecuritySystemStub.java index 533b640dc..9b4b6bea1 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/rss/SecuritySystemStub.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/rss/SecuritySystemStub.java @@ -19,11 +19,6 @@ package org.apache.maven.archiva.web.rss; * under the License. */ -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.codehaus.plexus.redback.authentication.AuthenticationDataSource; import org.codehaus.plexus.redback.authentication.AuthenticationException; import org.codehaus.plexus.redback.authentication.AuthenticationResult; @@ -40,8 +35,13 @@ import org.codehaus.plexus.redback.users.UserManager; import org.codehaus.plexus.redback.users.UserNotFoundException; import org.codehaus.plexus.redback.users.jdo.JdoUser; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** - * SecuritySystem stub used for testing. + * SecuritySystem stub used for testing. * * @version $Id$ */ @@ -94,58 +94,50 @@ public class SecuritySystemStub public AuthorizationResult authorize( SecuritySession arg0, Object arg1, Object arg2 ) throws AuthorizationException { - AuthorizationResult result = new AuthorizationResult( true, arg1, null); - + AuthorizationResult result = new AuthorizationResult( true, arg1, null ); + return result; } public String getAuthenticatorId() { - // TODO Auto-generated method stub return null; } public String getAuthorizerId() { - // TODO Auto-generated method stub return null; } public KeyManager getKeyManager() { - // TODO Auto-generated method stub return null; } public UserSecurityPolicy getPolicy() { - // TODO Auto-generated method stub return null; } public String getUserManagementId() { - // TODO Auto-generated method stub return null; } public UserManager getUserManager() { - // TODO Auto-generated method stub return null; } public boolean isAuthenticated( AuthenticationDataSource arg0 ) throws AuthenticationException, UserNotFoundException, AccountLockedException { - // TODO Auto-generated method stub return false; } public boolean isAuthorized( SecuritySession arg0, Object arg1 ) throws AuthorizationException { - // TODO Auto-generated method stub return false; } diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java index 7e4e22830..91851c891 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java @@ -44,7 +44,10 @@ public class DefaultMetadataResolver private MetadataRepository metadataRepository; /** - * FIXME: this needs to be configurable based on storage type, and availability of proxy module + * FIXME: this needs to be configurable based on storage type - and could also be instantiated per repo. Change to a + * factory. + * + * TODO: Also need to accommodate availability of proxy module * ... could be a different type since we need methods to modify the storage metadata, which would also allow more * appropriate methods to pass in the already determined repository configuration, for example, instead of the ID * diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java index e780ec473..ea93b3ff1 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java @@ -27,6 +27,7 @@ import org.apache.archiva.metadata.repository.filter.Filter; import java.util.Collection; +// FIXME: we should drop the repoId parameters and attach this to an instance of a repository storage public interface RepositoryStorage { ProjectMetadata readProjectMetadata( String repoId, String namespace, String projectId ) @@ -47,6 +48,6 @@ public interface RepositoryStorage Collection readArtifactsMetadata( String repoId, String namespace, String projectId, String projectVersion, Filter filter ); - // TODO: reconsider this API, do we want to expose storage format in the form of a path? + // FIXME: reconsider this API, do we want to expose storage format in the form of a path? ArtifactMetadata readArtifactMetadataFromPath( String repoId, String path ); } diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReader.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReader.java index a56f0befd..e092a257a 100644 --- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReader.java +++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/MavenRepositoryMetadataReader.java @@ -19,18 +19,17 @@ package org.apache.archiva.metadata.repository.storage.maven2; * under the License. */ -import java.io.File; - import org.apache.commons.lang.math.NumberUtils; import org.apache.maven.archiva.xml.XMLException; import org.apache.maven.archiva.xml.XMLReader; import org.dom4j.Element; +import java.io.File; + /** * RepositoryMetadataReader - read maven-metadata.xml files. * - * TODO: we should improve on this, ideally using the Maven standard libraries (which are unfortunately baked into - * maven-core now) + * TODO: we should improve on this, ideally using the Maven standard library */ public final class MavenRepositoryMetadataReader { @@ -44,6 +43,7 @@ public final class MavenRepositoryMetadataReader * @param metadataFile the maven-metadata.xml file to read. * @return the archiva repository metadata object that represents the provided file contents. * @throws org.apache.maven.archiva.xml.XMLException + * */ public static MavenRepositoryMetadata read( File metadataFile ) throws XMLException diff --git a/archiva-modules/plugins/metadata-repository-file/pom.xml b/archiva-modules/plugins/metadata-repository-file/pom.xml index cb640e4fc..6c5cd5b63 100644 --- a/archiva-modules/plugins/metadata-repository-file/pom.xml +++ b/archiva-modules/plugins/metadata-repository-file/pom.xml @@ -18,14 +18,14 @@ ~ under the License. --> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - + plugins org.apache.archiva 1.4-SNAPSHOT metadata-repository-file File System Backed Metadata Repository diff --git a/archiva-modules/plugins/metadata-store-jcr/pom.xml b/archiva-modules/plugins/metadata-store-jcr/pom.xml index 20df6c76f..7b3003a2b 100644 --- a/archiva-modules/plugins/metadata-store-jcr/pom.xml +++ b/archiva-modules/plugins/metadata-store-jcr/pom.xml @@ -50,7 +50,7 @@ plexus-spring test - +javax.jcr jcr diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java index 013bfbab9..044a6895c 100644 --- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java +++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java @@ -102,11 +102,11 @@ public class JcrMetadataRepository public void login() { - // TODO: need to close this at the end - do we need to add it in the API? + // FIXME: need to close this at the end - do we need to add it in the API? try { - // TODO: shouldn't do this in constructor since it's a singleton + // FIXME: shouldn't do this in constructor since it's a singleton session = repository.login( new SimpleCredentials( "username", "password".toCharArray() ) ); Workspace workspace = session.getWorkspace(); @@ -118,12 +118,12 @@ public class JcrMetadataRepository } catch ( LoginException e ) { - // TODO + // FIXME throw new RuntimeException( e ); } catch ( RepositoryException e ) { - // TODO + // FIXME throw new RuntimeException( e ); } } @@ -199,7 +199,7 @@ public class JcrMetadataRepository n.setProperty( entry.getKey(), entry.getValue() ); } } - // TODO: need some context around this so it can be done only when needed + // FIXME: need some context around this so it can be done only when needed session.save(); } catch ( RepositoryException e ) @@ -224,7 +224,7 @@ public class JcrMetadataRepository versionNode.setProperty( "url", versionMetadata.getUrl() ); versionNode.setProperty( "incomplete", versionMetadata.isIncomplete() ); - // TODO: decide how to treat these in the content repo + // FIXME: decide how to treat these in the content repo if ( versionMetadata.getScm() != null ) { versionNode.setProperty( "scm.connection", versionMetadata.getScm().getConnection() ); @@ -703,7 +703,7 @@ public class JcrMetadataRepository versionMetadata.setIncomplete( node.hasProperty( "incomplete" ) && node.getProperty( "incomplete" ).getBoolean() ); - // TODO: decide how to treat these in the content repo + // FIXME: decide how to treat these in the content repo String scmConnection = getPropertyString( node, "scm.connection" ); String scmDeveloperConnection = getPropertyString( node, "scm.developerConnection" ); String scmUrl = getPropertyString( node, "scm.url" ); @@ -1001,12 +1001,12 @@ public class JcrMetadataRepository { try { - // TODO: this shouldn't be here! Repository may need a context + // FIXME: this shouldn't be here! Repository may need a context session.save(); } catch ( RepositoryException e ) { - // TODO + // FIXME throw new RuntimeException( e ); } session.logout(); @@ -1016,9 +1016,8 @@ public class JcrMetadataRepository { this.metadataFacetFactories = metadataFacetFactories; - // TODO: check if actually called by normal injection - // TODO: consider using namespaces for facets instead of the current approach: + // (if used, check if actually called by normal injection) // for ( String facetId : metadataFacetFactories.keySet() ) // { // session.getWorkspace().getNamespaceRegistry().registerNamespace( facetId, facetId ); diff --git a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java index 82bbc2b13..5ba9abb12 100644 --- a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java +++ b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java @@ -205,9 +205,9 @@ public class DuplicateArtifactsConsumer problem.setProject( originalArtifact.getProject() ); problem.setVersion( originalArtifact.getVersion() ); problem.setId( id ); - // TODO: need to get the right storage resolver for the repository the dupe artifact is in, it might be + // FIXME: need to get the right storage resolver for the repository the dupe artifact is in, it might be // a different type - // TODO: we need the project version here, not the artifact version + // FIXME: we need the project version here, not the artifact version problem.setMessage( "Duplicate Artifact Detected: " + path + " <--> " + pathTranslator.toPath( dupArtifact.getNamespace(), dupArtifact.getProject(), dupArtifact.getVersion(), dupArtifact.getId() ) ); -- 2.39.5