[
https://issues.apache.org/jira/browse/MNG-8018?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17816442#comment-17816442
]
Jörg Hohwiller commented on MNG-8018:
-------------------------------------
I have created a minimal demo project to reproduce the bug and attached it as
[^mng-8018.tgz].
* On Windows open a git-bash
* Extract the attached project: {{tar xvfz mng-8018.tgz}}
* {{cd mng-8018}}
* {{./mng-8018.sh}}
> Maven creates local repo at wrong path
> --------------------------------------
>
> Key: MNG-8018
> URL: https://issues.apache.org/jira/browse/MNG-8018
> Project: Maven
> Issue Type: Bug
> Components: Artifacts and Repositories, Command Line
> Affects Versions: 3.9.6
> Environment: {code}
> $ mvn -v
> Apache Maven 3.9.4 (dfbb324ad4a7c8fb0bf182e6d91b0ae20e3d2dd9)
> Maven home: D:\projects\mmm\software\mvn
> Java version: 21.0.1, vendor: Eclipse Adoptium, runtime:
> D:\projects\mmm\software\java
> Default locale: en_US, platform encoding: UTF-8
> OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
> {code}
> Reporter: Jörg Hohwiller
> Priority: Major
> Attachments: mng-8018.tgz
>
>
> I am hunting bugs with maven for years now that is creating a new local
> repository in an odd location (something like {{D:\d\...}} but before also
> {{$PWD/${M2_REPO}}} - see https://github.com/devonfw/ide/issues/706). Now I
> was finally able to become able to effectively reproduce it:
> I created an empty {{d}} folder on my {{D:}} drive but removed all
> permissions on it even for myself to force errors in case maven will ever try
> to populate this directory again.
> This now happened when maven is executed from {{maven-exec-plugin}} and the
> nested maven tries to resolve the local repository in that context it seems
> to consider the path to the local repository as relative even though it is
> absolute.
> Here are some more detailed circumstances when this error is happening:
> * I am on Windows
> * I am working in git-bash when I invoke maven ({{mvn install}}).
> * To relocate the local repository, I used this "hack": {{export MAVEN_OPTS=
> -Duser.home=/d/projects/mmm/conf}}. This works to take the settings from
> {{/d/projects/mmm/conf/.m2/settings.xml}} what in my case configures my repo
> to be at {{/c/Users/hohwille/conf/.m2/repository}} (git-bash syntax) or
> {{C:\Users\hohwille\\.m2\\repository}} (Windows syntax) at least for the
> top-level {{mvn}} process.
> * Now when I did run {{mvn install}} the project was executing {{mvn
> install}} in a test folder via {{exec-maven-plugin}}. See
> https://github.com/m-m-m/code/blob/238899e2b2525081b39f59932e093d5c331a2864/java/impl/pom.xml#L64
> This results in the following error:
> {code}
> [INFO] --- exec:3.1.0:exec (Install test project) @ mmm-code-java-impl ---
> [ERROR] Could not create local repository at
> D:\d\projects\mmm\conf\.m2\repository -> [Help 1]
> [ERROR]
> [ERROR] To see the full stack trace of the errors, re-run Maven with the -e
> switch.
> [ERROR] Re-run Maven using the -X switch to enable full debug logging.
> [ERROR]
> [ERROR] For more information about the errors and possible solutions, please
> read the following articles:
> [ERROR] [Help 1]
> http://cwiki.apache.org/confluence/display/MAVEN/LocalRepositoryNotAccessibleException
> [ERROR] Command execution failed.
> org.apache.commons.exec.ExecuteException: Process exited with an error: 1
> (Exit value: 1)
> at org.apache.commons.exec.DefaultExecutor.executeInternal
> (DefaultExecutor.java:404)
> at org.apache.commons.exec.DefaultExecutor.execute
> (DefaultExecutor.java:166)
> at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:1000)
> at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:947)
> at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:471)
> at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo
> (DefaultBuildPluginManager.java:126)
> at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2
> (MojoExecutor.java:328)
> at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute
> (MojoExecutor.java:316)
> at org.apache.maven.lifecycle.internal.MojoExecutor.execute
> (MojoExecutor.java:212)
> {code}
> I was already hunting down the source-code of maven-exec plugin if it
> contains any code related to this problem. But it seems not to explicitly
> handle or tweak any related environment variables or do anything different
> where {{mvn}} is executed or any other program.
> So my assumption is that maven core itself has some logic to resolve the
> local maven repo and decide if something is a relative or an absolute path.
> As this is working for paths in git-bash syntax for the top-level {{mvn}}
> process, I would guess that there is some magic detection of git-bash/MSYS
> that however, stops working if {{mvn}} is then again executed but not
> directly from git-bash but from a Java-process (maven itself) within.
> BTW: With the path treated wrongly as relative it can not find the
> {{settings.xml}} and hence computes the path to the local repository in the
> "default location" what is inside my tweaked home directory causing the
> difference between {{C}} and {{D}} drive.
> I know this is kind of an edge-case but as I was searching for this for a
> long time, I decided to report this. As I could not see it is a bug of
> {{maven-exec-plugin}} itself, I finally filed it here. I would be very
> pleased, if you have any further ideas on this.
> In case I should try anything special please let me know and I will do and
> provide results.
> You could however easily reproduce this by creating a simple project with
> again a very simple maven project in {{src/test/resources/maven.project}}
> such pom section:
> {code}
> ...
> <build>
> <plugins>
> <plugin>
> <groupId>org.codehaus.mojo</groupId>
> <artifactId>exec-maven-plugin</artifactId>
> <version>3.1.0</version>
> <executions>
> <execution>
> <id>Install test project</id>
> <phase>test-compile</phase>
> <goals>
> <goal>exec</goal>
> </goals>
> </execution>
> </executions>
> <configuration>
> <executable>mvn</executable>
>
> <workingDirectory>target/test-classes/maven.project</workingDirectory>
> <arguments>
> <argument>install</argument>
> </arguments>
> </configuration>
> </plugin>
> </plugins>
> </build>
> ...
> {code}
> Then in {{git-bash}} run {{export MAVEN_OPTS="-Duser.home=$HOME" && mvn
> install}}. The secondary {{mvn}} process should then create a repo in
> something like {{C:\c\Users\«yourlogin»\.m2\repository\}}.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)