[
https://issues.apache.org/jira/browse/MNG-7038?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17622770#comment-17622770
]
ASF GitHub Bot commented on MNG-7038:
-------------------------------------
gnodet commented on PR #840:
URL: https://github.com/apache/maven/pull/840#issuecomment-1288067732
> @gnodet Thanks for the code pointer. This really helps in my understanding
the code.
>
> > For the per-project settings.xml, I don't think they should use the
topdir, at least not using the parent hierarchy. I think the way the
multiModelDirectory is currently computed would better fit the need. Especially
if the settings.xml is to be located in the .mvnd/ directory.
>
> I disagree with this because if you want the settings.xml in a `.mvnd`
then you currently must also create a `.mvn` with a dummy file or it will not
find the correct directory. Also the absense of a `.mvn` in a project can lead
to unexpected effects.
>
> @michael-o Yes, good point.
>
> I agree with the property being immutable from an as early moment in the
build as possible.
>
> My current thoughts about the meaning of the topdir:
>
> * It is the `filesystem directory` of the top module `within` the project.
So I intend to walk up the `project/module tree` instead of the `filesystem
directory tree`.
> * Walking up stops if there is no parent defined or the parent is outside
the project (relative path is empty).
Note that with build poms, the relative path can be kept empty and it will
be inferred from the reactor. But it should be available after the first phase
of the model building IIRC.
> * So if there is a pom.xml without a parent, yet in the parent `filesystem
directory` there is a pom.xml, walking up will still terminate because there is
no parent relation defined.
> * This also means that in a single module project it is the same as the
`project.basedir`.
>
> The important difference with the `multiModelDirectory` is that that one
walks up the `file system` directories until it finds a `.mvn` subdirectory (or
/). This has a real possibility of walking out of the project. So the same
project on the same machine in a directory under the same user with all
environment variables the same may still be built differently only because it
was checked out in a different subdirectory where one of the parent folders
contains a `.mvn` with some kind of config file that is picked up.
>
> So the `topdir` definition I have in mind does not depend on the existence
of `.mvn` or `.mvnd` or anything else and as such can be used more reliably in
all projects.
It really depends on the structure of the project. Some projects may not
have their ancestor as the topmost directory. We need to cover those use cases
too. Also, it needs to work during a project-aggregation (or we need some
properties for that). I think we need to think in terms of use-cases, not
properties.
What's your first use-case for the topdir thing ?
> Introduce public property to point to a root directory of (multi-module)
> project
> --------------------------------------------------------------------------------
>
> Key: MNG-7038
> URL: https://issues.apache.org/jira/browse/MNG-7038
> Project: Maven
> Issue Type: Improvement
> Reporter: Envious Guest
> Priority: Major
> Fix For: Issues to be reviewed for 4.x
>
>
> This is a request to expose a property *maven.multiModuleProjectDirectory*
> which is currently internal (or introduce a brand new one with analogous
> functionality).
> * For a single-module project, its value should be same as *project.basedir*
> * For multi-module project, its value should point to a project.basedir of a
> root module
> Example:
> multi-module // located at /home/me/sources
> +- module-a
> +- module B
> Sample multi-module/pom.xml:
> {{<project>}}
> {{ <parent>}}
> {{ <groupId>com.acme</groupId>}}
> {{ <artifactId>corp-parent</artifactId>}}
> {{ <version>1.0.0-RELEASE</version>}}
> {{ </parent>}}
> {{ <groupId>com.acme</groupId>}}
> {{ <artifactId>multi-module</artifactId>}}
> {{ <version>0.5.2-SNAPSHOT</version>}}
> {{ <modules>}}
> {{ <module>module-a</module>}}
> {{ <module>module-b</module>}}
> {{ </modules>}}
> {{</project>}}
> The property requested should return /home/me/sources/multi-module,
> regardless of whether it's referenced in any of the child modules (module-a,
> module-b) or in multi-module.
> Note that multi-module itself has parent (e.g. installed in a local
> repository), so the new property should be smart enough to detect it and
> still point to /home/me/sources/multi-module instead of the local repository
> where the corp-parent is installed.
> The use-case for such a property could be to have a directory for combined
> report of static analysis tools. Typical example - jacoco combined coverage
> reports.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)