[ https://issues.apache.org/jira/browse/MNG-7038?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17706401#comment-17706401 ]
ASF GitHub Bot commented on MNG-7038: ------------------------------------- michael-o commented on code in PR #1061: URL: https://github.com/apache/maven/pull/1061#discussion_r1152000103 ########## maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java: ########## @@ -494,14 +504,50 @@ public interface MavenExecutionRequest { /** * @since 3.3.0 + * @deprecated use {@link #setRootdir(Path)} instead */ + @Deprecated void setMultiModuleProjectDirectory(File file); /** * @since 3.3.0 + * @deprecated use {@link #getRootdir()} instead */ + @Deprecated File getMultiModuleProjectDirectory(); + /** + * Sets the root dir of the project. + * + * @since 4.0.0 + */ + MavenExecutionRequest setRootdir(Path rootdir); + + /** + * Gets the root directory of the project, which is the parent directory containing the {@code .mvn} directory. + * If there's no such file, an {@code IllegalArgumentException} will be thrown. + * + * @throws IllegalArgumentException if the root directory could not be found Review Comment: Isn't this `IllegalStateException`? ########## maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java: ########## @@ -133,6 +134,21 @@ public Object getValue(String expression) { valueSources.add(new BuildTimestampValueSource(config.getBuildStartTime(), modelProperties)); } + valueSources.add(new AbstractValueSource(false) { + @Override + public Object getValue(String expression) { + if ("rootdir".equals(expression)) { + Path path = config.getRootdir(); + if (path != null) { + return path.toString(); + } + throw new IllegalArgumentException("Unable to find the root directory. " Review Comment: ISE rather? The expression isn't invalid but the state within, no? ########## maven-model-builder/src/main/java/org/apache/maven/model/path/ProfileActivationFilePathInterpolator.java: ########## @@ -79,6 +80,25 @@ public Object getValue(String expression) { return null; } + interpolator.addValueSource(new AbstractValueSource(false) { + @Override + public Object getValue(String expression) { + /* + * We intentionally only support ${rootdir} and not ${session.rootdir} as the latter form + * would suggest that other session.* expressions can be used which is beyond the design. + */ + if ("rootdir".equals(expression)) { + Path path = context.getRootdir(); + if (path != null) { + return path.toString(); + } + throw new IllegalArgumentException("Unable to find the root directory. " Review Comment: Same here ########## maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java: ########## @@ -321,6 +323,46 @@ void initialize(CliRequest cliRequest) throws ExitException { } } + Path topdir = Paths.get(cliRequest.workingDirectory); + boolean isAltFile = false; + for (String arg : cliRequest.args) { + if (isAltFile) { + Path path = Paths.get(arg); + if (Files.isDirectory(path)) { Review Comment: Granted. > 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)