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

3
我正在开发一个maven插件,需要获取多模块项目的根目录。使用 mavenProject.getBuild().getDirectory() 可以获取当前模块的目录路径。因此,我尝试获取根MavenProject,但是通过定义如下的getRootProject()getRootProject().getBuild().getDirectory() 返回"${project.basedir}"(字面上的字符串值...我不知道如何解决它,即使我能够解决它,它也会解析为当前模块,这不是我想要的)。
@Parameter(defaultValue = "${project}", readonly = true)
private MavenProject mavenProject;
// ...
private MavenProject getRootProject() {
    MavenProject project = mavenProject;
    while (project.getParent() != null) {
        project = project.getParent();
    }
    return project;
}

如何获取根模块的(已解析和绝对)路径?

我自己找到了一个解决方案(下面分享),但仍然对上述${project.basedir}的行为很好奇...如果有其他解决方案,我也会很感激 :) - Hugues M.
我想问一下,为什么你需要在插件中获取多模块构建的根级别? - khmarbaise
这是一个报告插件。由于与我的组织相关的原因,我需要收集每个模块(及其依赖项)的详细信息,并将该信息写入整个树的根模块下的“target”目录。我需要的信息很容易通过Maven获得,但在Maven之外很难获得,因此Maven插件似乎是一个不错的选择。 - Hugues M.
你已经知道了,有这样的插件可以用于网站生成和报告,并且还能生成关于依赖项的报告吗? - khmarbaise
是的,但它不能给我做我想要的事情提供相同的控制(不是那种报告)。我强烈倾向于使用简单直接的自定义Maven插件来链接现有插件和自定义脚本,以从大量难以解析的细节中提取我想要的部分(并格式化可能会改变)。如果这种做法不被鼓励,也许我应该考虑使用Gradle,但目前对我来说这样做很好。 - Hugues M.
你能提供更多关于你想要报告的内容的细节吗?这样,如果对社区中的其他人有趣的话,Maven社区就可以创建这样的东西。 - khmarbaise
1个回答

3
感谢这个回答,它从不同的角度(而不是Mojo)解决了相同的问题,我找到了一个解决方案:
将以下字段添加到我的Mojo中:
@Parameter(defaultValue = "${session}", readonly = true)
private MavenSession mavenSession;

然后按以下方式使用它:
mavenSession.getExecutionRootDirectory()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接