Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Mojo获取多模块maven项目的根目录_Java_Maven_Maven Plugin - Fatal编程技术网

Java 从Mojo获取多模块maven项目的根目录

Java 从Mojo获取多模块maven项目的根目录,java,maven,maven-plugin,Java,Maven,Maven Plugin,我正在开发一个maven插件,我需要获得多模块项目的根目录 通过mavenProject.getBuild().getDirectory()我可以得到当前模块的目录路径,好吗 所以我想尝试获取rootMavenProject,但是使用下面定义的getRootProject(),getRootProject().getBuild().getDirectory()返回“${project.basedir}”(字面上就是那个字符串值…我不知道如何解析,即使我解析了它,它也会解析为当前模块,这不是我想要

我正在开发一个maven插件,我需要获得多模块项目的根目录

通过
mavenProject.getBuild().getDirectory()
我可以得到当前模块的目录路径,好吗

所以我想尝试获取root
MavenProject
,但是使用下面定义的
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()