You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by GitBox <gi...@apache.org> on 2022/10/24 10:47:37 UTC

[GitHub] [maven] merikan commented on pull request #840: [MNG-7038] Introducing project.topdir

merikan commented on PR #840:
URL: https://github.com/apache/maven/pull/840#issuecomment-1288845375

   I've been following this thread and I just thought I'd throw in my two cents. This is what my use case looks like:
   
   Over the years I have built a number of multi-modular projects that have spring-boot as a parent. I have a number of artefacts in the root (folder) that I want to access from my sub-modules (pmd, spotbug, spotless, dependency-check, etc). 
   ```
   root
   ├── etc
   ├── module1
   ├── module2
   ├── module3
   └── pom.xml
   ```
   
   Initially I was using a build-module but since it was used as a dependency and was not always available I gave up using that approach. 
   
   The solution I've been using for the last few years is the `build-helper-maven-plugin` and the `rootlocation` goal. I don't know how it resolves the root location, but it has worked in all my projects without any problems. (The only problem with this solution is that a plugin is bound to a phase and since there is no default phase to bind to, I always have to run validate before if I want to execute the plugin goal from the command line, like this: `$ mvn validate spotless:check`. But that is an entirely different issue)
   
   ```
   <configuration>
     <printFailingErrors>true</printFailingErrors>
     <failOnViolation>true</failOnViolation>
     <rulesets>
       <ruleset>${rootlocation}/etc/pmd/pmd-ruleset.xml</ruleset>
     </rulesets>
   </configuration>
   ```
   I guess most Maven projects probably use, for the sake of simplicity and probably the most intuitive, a direct hierarchical structure which is also reflected on the file system. So do I, with a few exceptions where I used a parent module that was  next to the child modules. When using the `relativePath` element, we can have all sorts of parent-child relationships where submodules might have different parents and it can get very complicated. Most people probably like to think of a common ancestor in a project but it is not, as I understand it, something that maven imposes. 
   
   I understand that people can have quite complex project structures and maybe also in a mono-repo and that Maven should be able to support it. To me it sounds reasonable to assume a `.mvn` directory as the root when using a subfolder structured project but there may be use cases where that is not correct either. 
   
   For me, regardless of which submodule I'm building from, I want to be able to find my shared artefacts up in the hierarchy (file structure). This is what many tools does and most people are used to it and it is quite accepted. I do think that mixing it with pom parent relation makes it a lot more complicated.
   
   One solution could be to use different strategies for resolving the project root (topdir) and one strategy, the default one, could be to traverse the directory tree searching for a marker, e.g. `.mvn` directory. To make it more flexible when traversing the tree, then maybe it should be possibility for the user to override the marker, for what is considered a project root, with another directory or filename.   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@maven.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org