[shrinkwrap-issues] [JBoss JIRA] (SHRINKRES-190) implements equals and hashCode methods in MavenResolvedArtifactImpl / MavenArtifactInfoImpl

Karel Piwko (JIRA) issues at jboss.org
Wed Jul 23 03:55:30 EDT 2014


    [ https://issues.jboss.org/browse/SHRINKRES-190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12987315#comment-12987315 ] 

Karel Piwko edited comment on SHRINKRES-190 at 7/23/14 3:54 AM:
----------------------------------------------------------------

Workaround could be to use *MavenResolvedArtifact#getCoordinate()*. That would use Maven coordinates without version to compare via hashcode/equals.

MavenResolvedArtifact contains more just that that, for instance:

* dependency tree
* exclusions
* could contain remote repository where it comes from (common source of problems in Maven 3.1+)


The question is how many there fields should be considered in *equals(Object)* method.

What could be done would be to create a new ResolvedArtifactProcess for MavenCoordinate. E.g. your code would look like:

{code}
 public static List<MavenCoordinate> resolveAllArquillianDependencies() {
    	return Arrays.asList(
    			Maven.resolver()
					.loadPomFromFile("src/test/resources/arquillian.pom.xml")
					.importTestDependencies().resolve()
					.withoutTransitivity()
					.as(MavenCoordinate.class));
    }
    
    public static List<MavenResolvedArtifact> resolveAllTestNonTransitiveNonArquillianDependencies() {
    	List<MavenResolvedArtifact> testDependencies = resolveAllTestNonTransitiveDependencies();
    	
    	List<MavenCoordinate> arquillianDependencies = resolveAllArquillianDependencies();
    	
    	List<MavenResolvedArtifact> filteredTestDependencies = new ArrayList<MavenResolvedArtifact>();
    	for (MavenResolvedArtifact testDependency : testDependencies) {
    		if (!arquillianDependencies.contains(testDependency.getCoordinate())) {
    			filteredTestDependencies.add(testDependency);
    		}
    	}
    	return filteredTestDependencies;
    }
{code}

Would that fix your need?
 


was (Author: kpiwko):
Workaround could be to use *MavenResolvedArtifact#getCoordinate()*. That would use Maven coordinates without version to compare via hashcode/equals.

MavenResolvedArtifact contains more just that that, for instance:

* dependency tree
* could contain remote repository where it comes from (common source of problems in Maven 3.1+

The question is how many there fields should be considered in *equals(Object)* method.

What could be done would be to create a new ResolvedArtifactProcess for MavenCoordinate. E.g. your code would look like:

{code}
 public static List<MavenCoordinate> resolveAllArquillianDependencies() {
    	return Arrays.asList(
    			Maven.resolver()
					.loadPomFromFile("src/test/resources/arquillian.pom.xml")
					.importTestDependencies().resolve()
					.withoutTransitivity()
					.as(MavenCoordinate.class));
    }
    
    public static List<MavenResolvedArtifact> resolveAllTestNonTransitiveNonArquillianDependencies() {
    	List<MavenResolvedArtifact> testDependencies = resolveAllTestNonTransitiveDependencies();
    	
    	List<MavenCoordinate> arquillianDependencies = resolveAllArquillianDependencies();
    	
    	List<MavenResolvedArtifact> filteredTestDependencies = new ArrayList<MavenResolvedArtifact>();
    	for (MavenResolvedArtifact testDependency : testDependencies) {
    		if (!arquillianDependencies.contains(testDependency.getCoordinate())) {
    			filteredTestDependencies.add(testDependency);
    		}
    	}
    	return filteredTestDependencies;
    }
{code}

Would that fix your need?
 

> implements equals and hashCode methods in MavenResolvedArtifactImpl / MavenArtifactInfoImpl
> -------------------------------------------------------------------------------------------
>
>                 Key: SHRINKRES-190
>                 URL: https://issues.jboss.org/browse/SHRINKRES-190
>             Project: ShrinkWrap Resolvers
>          Issue Type: Feature Request
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 2.1.1
>            Reporter: Mathieu Lachance
>
> I'm currently to find an effective way to filter out many dependencies at once that I could provide within a "dummy" pom.xml.
> I'd like to do the following:
> {code:java}
>     public static List<MavenResolvedArtifact> resolveAllTestNonTransitiveDependencies() {
>     	return Arrays.asList(
>     			Maven.resolver()
> 					.loadPomFromFile("pom.xml")
> 					.importTestDependencies().resolve()
> 					.withoutTransitivity()
> 					.asResolvedArtifact());
>     }
>     
>     public static List<MavenResolvedArtifact> resolveAllArquillianDependencies() {
>     	return Arrays.asList(
>     			Maven.resolver()
> 					.loadPomFromFile("src/test/resources/arquillian.pom.xml")
> 					.importTestDependencies().resolve()
> 					.withoutTransitivity()
> 					.asResolvedArtifact());
>     }
>     
>     public static List<MavenResolvedArtifact> resolveAllTestNonTransitiveNonArquillianDependencies() {
>     	List<MavenResolvedArtifact> testDependencies = resolveAllTestNonTransitiveDependencies();
>     	
>     	List<MavenResolvedArtifact> arquillianDependencies = resolveAllArquillianDependencies();
>     	
>     	List<MavenResolvedArtifact> filteredTestDependencies = new ArrayList<MavenResolvedArtifact>();
>     	for (MavenResolvedArtifact testDependency : testDependencies) {
>     		if (!arquillianDependencies.contains(testDependency)) {
>     			filteredTestDependencies.add(testDependency);
>     		}
>     	}
>     	return filteredTestDependencies;
>     }
> {code}
> The problem is that MavenResolvedArtifactImpl does not implements equals and hashCode needed for using Collection::contains method.
> I think it would be safe to delegate MavenResolvedArtifactImpl / MavenArtifactInfoImpl equals and hashCode methods to the one defined in  MavenCoordinateImpl
> Thanks,



--
This message was sent by Atlassian JIRA
(v6.2.6#6264)


More information about the shrinkwrap-issues mailing list