You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Tamas Cservenak (Jira)" <ji...@apache.org> on 2023/10/27 08:21:00 UTC

[jira] [Comment Edited] (MRESOLVER-392) Resolver installer should not be "smart" about installs

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

Tamas Cservenak edited comment on MRESOLVER-392 at 10/27/23 8:20 AM:
---------------------------------------------------------------------

Current logic (present in Resolver 1.x):
{noformat}
            boolean copy = "pom".equals(artifact.getExtension())
                    || srcFile.lastModified() != dstFile.lastModified()
                    || srcFile.length() != dstFile.length()
                    || !srcFile.exists();
{noformat}

That is:
* POMs are always installed (I guess due subsequent "naive change detection", POMs may be same in size buy contain different data)
* some 'naive change detection": timestamp and size compared
* ~if source does not exists~ non existent files will yield in copy=true => failure

Now, I find all these totally flawed (especially the "change detection"), while the last line I find really weird: there is an install request for non existent file, silently skip it? It was added later to resolver without issue https://github.com/apache/maven-resolver/commit/cc32c97cc72f186acb6fe897ae8bd105ba6980c3

My guess is that there was some Maven2/3 transition issue, something was probably creating install request without backing file (my beer-guess is some sort of Metadata).

I am about to change this:
* always install
* keep the "if missing" logic that is DISABLED by default (so let resolver behave as should), but let users turn on this legacy behaviour, as I guess some legacy code may trigger it (so to not leave users stranded)




was (Author: cstamas):
Current logic (present in Resolver 1.x):
{noformat}
            boolean copy = "pom".equals(artifact.getExtension())
                    || srcFile.lastModified() != dstFile.lastModified()
                    || srcFile.length() != dstFile.length()
                    || !srcFile.exists();
{noformat}

That is:
* POMs are always installed (I guess due subsequent "naive change detection", POMs may be same in size buy contain different data)
* some 'naive change detection": timestamp and size compared
* if source does not exists

Now, I find all these totally flawed (especially the "change detection"), while the last line I find really weird: there is an install request for non existent file, silently skip it? It was added later to resolver without issue https://github.com/apache/maven-resolver/commit/cc32c97cc72f186acb6fe897ae8bd105ba6980c3

My guess is that there was some Maven2/3 transition issue, something was probably creating install request without backing file (my beer-guess is some sort of Metadata).

I am about to change this:
* always install
* keep the "if missing" logic that is DISABLED by default (so let resolver behave as should), but let users turn on this legacy behaviour, as I guess some legacy code may trigger it (so to not leave users stranded)



> Resolver installer should not be "smart" about installs
> -------------------------------------------------------
>
>                 Key: MRESOLVER-392
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-392
>             Project: Maven Resolver
>          Issue Type: Bug
>          Components: Resolver
>            Reporter: Tamas Cservenak
>            Priority: Major
>             Fix For: 2.0.0
>
>
> Seems in some cases (equality by timestamp and file size) DefaultInstaller will NOT install the requested file, and log this fact on DEBUG level.
> This is wrong: resolver should NOT be "smart" in this case. IMO, if "install request" flies it, resolver should install unconditionally.
> Or, maybe perform some more checks, and refuse install in case like:
> * release artifact that is already present in local repository?



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