Java 从Mojo获取多模块maven项目的根目录
我正在开发一个maven插件,我需要获得多模块项目的根目录 通过Java 从Mojo获取多模块maven项目的根目录,java,maven,maven-plugin,Java,Maven,Maven Plugin,我正在开发一个maven插件,我需要获得多模块项目的根目录 通过mavenProject.getBuild().getDirectory()我可以得到当前模块的目录路径,好吗 所以我想尝试获取rootMavenProject,但是使用下面定义的getRootProject(),getRootProject().getBuild().getDirectory()返回“${project.basedir}”(字面上就是那个字符串值…我不知道如何解析,即使我解析了它,它也会解析为当前模块,这不是我想要
mavenProject.getBuild().getDirectory()
我可以得到当前模块的目录路径,好吗
所以我想尝试获取rootMavenProject
,但是使用下面定义的getRootProject()
,getRootProject().getBuild().getDirectory()
返回“${project.basedir}”
(字面上就是那个字符串值…我不知道如何解析,即使我解析了它,它也会解析为当前模块,这不是我想要的)
如何获得根模块的(已解析和绝对)路径?多亏了它从不同的角度(而不是从Mojo)处理同一问题,我找到了一个解决方案:
将以下字段添加到my Mojo:
@Parameter(defaultValue = "${session}", readonly = true)
private MavenSession mavenSession;
然后这样使用:
mavenSession.getExecutionRootDirectory()
我自己找到了一个解决方案(在下面分享),但仍然对上面描述的
${project.basedir}
的行为感到好奇……如果提供其他解决方案,我也会很感激:)我想问你为什么需要插件中多模块构建的根级别?这是一个报告插件。出于与我的组织相关的原因,我需要收集每个模块(及其依赖项)的详细信息,并将这些信息写入整个树的根模块的“target”目录下。我需要的信息很容易被maven获得,在maven之外也很难获得,因此maven插件似乎是个好主意。你知道已经存在这样的站点生成和报告插件,它也会生成关于部门的报告吗?是的,但它没有给我相同的控制权来做我想要的事情(不是那种报告). 我强烈喜欢一个简单明了的自定义maven插件,而不是将现有插件与自定义脚本链接起来,从大量难以解析的细节(可能会改变的格式)中提取我想要的信息。如果这种做法是气馁的,也许我应该考虑Gradle代替,但目前,对我来说很好。
mavenSession.getExecutionRootDirectory()