我编写了一个Maven插件,它只能在父模块上运行。它基本上是一个定制的原型插件,有一些额外的步骤,因此它从命令行运行,而不是生命周期的一部分。
目前在子模块上运行时失败;它从执行命令的父模块(我关心的位)上取而代之,然后在迭代子模块时失败。现在,我能想到的一个解决方法是-N
标志 - 这解决了问题。问题是这个插件将由许多不同的人从命令行运行,并且我希望它尽可能简单。
我已查看this页面并尝试了可能的嫌疑人; @inheritByDefault=false
但这没有任何区别。
有什么建议吗?
我想我可以在插件代码中检查项目对象是否至少有一个模块,如果是这样执行,否则跳过...虽然看起来不太好看。
答案 0 :(得分:2)
我通常通过将maven会话的执行根目录与模块的基目录进行比较来解决该问题:
public class ReactorRootRunnerMojo extends AbstractMojo {
/**
* @parameter expression="${session}"
*/
private MavenSession session;
public void execute() throws MojoExecutionException, MojoFailureException {
if (!isReactorRootProject()) {
return;
}
// your code
}
private boolean isReactorRootProject() throws MojoExecutionException {
try {
String executionRootPath = new File(session.getExecutionRootDirectory()).getCanonicalFile().getAbsolutePath();
String basedirPath = basedir.getCanonicalFile().getAbsolutePath();
return executionRootPath.equals(basedirPath);
} catch (IOException e) {
throw new MojoExecutionException(e);
}
}
}