【发布时间】: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