[ 
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)

Reply via email to