Jörg Hohwiller created MNG-8018:
-----------------------------------

             Summary: 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


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 make my repo be at 
{{/d/projects/mmm/conf/.m2/repository}} (git-bash syntax) or 
{{D:\projects\mmm\conf\\.m2\\repository}} 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.

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/main/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