[ https://issues.apache.org/jira/browse/MNG-8018?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17859513#comment-17859513 ]
Jörg Hohwiller edited comment on MNG-8018 at 6/23/24 10:15 PM: --------------------------------------------------------------- {quote} 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. {quote} I tried a less hackish solution: {code} export MAVEN_ARGS="-s /d/projects/mmm/conf/.m2/settings.xml" {code} However, with this I get the following error: {code} [ERROR] Error executing Maven. java.io.FileNotFoundException: The specified user settings file does not exist: D:\d\projects\mmm\conf\.m2\settings.xml at org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor.process (SettingsXmlConfigurationProcessor.java:91) at org.apache.maven.cli.MavenCli.configure (MavenCli.java:1084) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:279) at org.apache.maven.cli.MavenCli.main (MavenCli.java:206) at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103) at java.lang.reflect.Method.invoke (Method.java:580) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348) {code} was (Author: hohwille): {quote} 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. {quote} I tried a less hackish solution: {code} export MAVEN_ARGS="-s /d/projects/mmm/conf/.m2/settings.xml" {code} However, with this I still get the same error. In case that I do not reconfigure my settings, I get make the error get away. But my problem is that I have ~20 different large maven projects that all need their own settings with custom repos, etc. > 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)