【问题标题】:Obtain root directory of multi-module maven project from a Mojo从 Mojo 获取多模块 maven 项目的根目录
【发布时间】:2017-11-24 14:46:40
【问题描述】:

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

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

所以我想我会尝试获取root 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} 的行为感到好奇......如果提供其他解决方案也将不胜感激:)
  • 我会问你为什么需要在插件中构建多模块的根级别?
  • 这是一个报告插件。由于与我的组织有关的原因,我需要收集每个模块(及其依赖项)的详细信息,并将该信息写入整个树的根模块的“目标”目录下。我需要的信息很容易通过 maven 获得,而在 maven 之外很难获得,所以一个 maven 插件似乎是个好主意。
  • 您知道已经存在这样的用于站点生成和报告的插件,它还会生成有关依赖项的报告?
  • 是的,但它并没有给我同样的控制权来做我想做的事(不是那种报告)。我非常喜欢简单直接的自定义 maven 插件,而不是使用自定义脚本链接现有插件,以从大量难以解析的细节(可能会改变的格式)中提取我想要的位。如果不鼓励这种做法,也许我应该考虑使用 Gradle,但目前这对我来说效果很好。

标签: java maven maven-plugin


【解决方案1】:

感谢this answer 从不同的角度(不是从 Mojo)处理相同的问题,我找到了解决方案:

将以下字段添加到我的 Mojo:

@Parameter(defaultValue = "${session}", readonly = true)
private MavenSession mavenSession;

那就这样用吧:

mavenSession.getExecutionRootDirectory()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2013-12-13
    • 2012-05-23
    • 1970-01-01
    • 2011-05-21
    • 2018-02-06
    • 1970-01-01
    • 2021-02-25
    相关资源
    最近更新 更多