[ 
https://issues.apache.org/jira/browse/MRESOLVER-314?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17689802#comment-17689802
 ] 

ASF GitHub Bot commented on MRESOLVER-314:
------------------------------------------

cstamas opened a new pull request, #249:
URL: https://github.com/apache/maven-resolver/pull/249

   As their parsing is totally borked, and due that reason does not produce 
stable ordering either. OTOH, resolver does tend to sort versions, and this 
leads to completely unexpected IAEx-es being thrown only as users may use SHA1 
or any other hex string as artifact version.
   
   Reproducer by [email protected] added to tests.
   
   Fix attempt WIP 

> Getting "IllegalArgumentException: Comparison method violates its general 
> contract!"
> ------------------------------------------------------------------------------------
>
>                 Key: MRESOLVER-314
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-314
>             Project: Maven Resolver
>          Issue Type: Bug
>          Components: Resolver
>    Affects Versions: 1.9.4
>            Reporter: Christian Ziech
>            Priority: Major
>
> We are using the versions plugin to modify the version of a property in our 
> pom files. This now fails for us because the compareTo method of the 
> compareTo() method of the org.eclipse.aether.util.version.GenericVersion 
> violates the assumption that the relation is transitive.
> I wrote a small test which shows that 
> 0f224b94-SNAPSHOT.compareTo(ecb174eb-SNAPSHOT) := 0 and 
> 0f224b94-SNAPSHOT.compareTo(de09eebc-SNAPSHOT) := 0 but 
> ecb174eb-SNAPSHOT.compareTo(de09eebc-SNAPSHOT) := 1.
> This is in violation with:
> {quote}Finally, the implementor must ensure that x.compareTo(y)==0 implies 
> that sgn(x.compareTo(z)) == sgn(y.compareTo(z)), for all z.
> {quote}
> Here is some short demo code (truncated to the bare minimum I could find):
> {code:java}
> import org.eclipse.aether.util.version.GenericVersionScheme;
> import org.eclipse.aether.version.InvalidVersionSpecificationException;
> import org.eclipse.aether.version.Version;
> public class TestMavenResolver {
>     public void testCompare() throws InvalidVersionSpecificationException {
>         String [] strs = new String [] {"0f224b94-SNAPSHOT", 
> "ecb174eb-SNAPSHOT", "de09eebc-SNAPSHOT"};
>         List<Version> versions = new ArrayList<>();
>         GenericVersionScheme scheme = new GenericVersionScheme();
>         for (String str: strs) {
>             versions.add(scheme.parseVersion(str));
>         }
>         for (Version ver1 : versions) {
>             for (Version ver2 : versions) {
>                 if (ver1 != ver2) {
>                     int res = ver1.compareTo(ver2);
>                     System.out.println(ver1+".compareTo("+ver2+") := "+res);
>                 }
>             }
>         }
>     }
> }
> {code}
> The output of above code is:
> {noformat}
> 0f224b94-SNAPSHOT.compareTo(ecb174eb-SNAPSHOT) := 0
> 0f224b94-SNAPSHOT.compareTo(de09eebc-SNAPSHOT) := 0
> ecb174eb-SNAPSHOT.compareTo(0f224b94-SNAPSHOT) := 0
> ecb174eb-SNAPSHOT.compareTo(de09eebc-SNAPSHOT) := 1
> de09eebc-SNAPSHOT.compareTo(0f224b94-SNAPSHOT) := 0
> de09eebc-SNAPSHOT.compareTo(ecb174eb-SNAPSHOT) := -1
> {noformat}
> Just for reference, here is the exception we are getting:
> {noformat}
> Caused by: java.lang.IllegalArgumentException: Comparison method violates its 
> general contract!
>     at java.util.ComparableTimSort.mergeHi (ComparableTimSort.java:870)
>     at java.util.ComparableTimSort.mergeAt (ComparableTimSort.java:487)
>     at java.util.ComparableTimSort.mergeCollapse (ComparableTimSort.java:413)
>     at java.util.ComparableTimSort.sort (ComparableTimSort.java:213)
>     at java.util.Arrays.sort (Arrays.java:1315)
>     at java.util.Arrays.sort (Arrays.java:1509)
>     at java.util.ArrayList.sort (ArrayList.java:1750)
>     at java.util.Collections.sort (Collections.java:145)
>     at 
> org.apache.maven.repository.internal.DefaultVersionRangeResolver.resolveVersionRange
>  (DefaultVersionRangeResolver.java:168)
>     at 
> org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveVersionRange 
> (DefaultRepositorySystem.java:247)
>     at 
> org.codehaus.mojo.versions.api.DefaultVersionsHelper.lookupArtifactVersions 
> (DefaultVersionsHelper.java:183)
>     at 
> org.codehaus.mojo.versions.api.DefaultVersionsHelper.lookupArtifactVersions 
> (DefaultVersionsHelper.java:236)
>     at 
> org.codehaus.mojo.versions.api.PropertyVersions.resolveAssociatedVersions 
> (PropertyVersions.java:89)
>     at org.codehaus.mojo.versions.api.PropertyVersions.<init> 
> (PropertyVersions.java:80)
>     at 
> org.codehaus.mojo.versions.api.PropertyVersionsBuilder.newPropertyVersions 
> (PropertyVersionsBuilder.java:86)
>     at 
> org.codehaus.mojo.versions.api.DefaultVersionsHelper.getVersionPropertiesMap 
> (DefaultVersionsHelper.java:586)
>     at org.codehaus.mojo.versions.SetPropertyMojo.update 
> (SetPropertyMojo.java:141)
>     at org.codehaus.mojo.versions.SetPropertyMojo.update 
> (SetPropertyMojo.java:135)
>     at org.codehaus.mojo.versions.AbstractVersionsUpdaterMojo.process 
> (AbstractVersionsUpdaterMojo.java:329)
>     at org.codehaus.mojo.versions.AbstractVersionsUpdaterMojo.execute 
> (AbstractVersionsUpdaterMojo.java:270)
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to