如何检测maven插件在maven项目中执行?

Howto detect that maven plugin is executed inside maven project?

我想很好地识别 maven 插件是否从 maven 项目执行的情况,因为在 maven 项目之外执行时我需要不同的默认参数。

我可以将 @Component MavenProject project 注入到插件 Mojo 中,但是当没有 pom.xml.

时,它被设置为 test:test:jar:1

我可以注入基本目录 @Parameter(defaultValue = "${basedir}") File baseDir 并检查 pom.xml 文件,但这有异味(使用 polyglot maven 就没有 pom.xml 了)。

如何判断项目是在maven项目内执行还是在项目外执行?


我有特定的目标,我想在两种情况下都使用相同的目标。

重要的是你清楚地决定哪些目标应该只从 CLI 使用,哪些应该在 pom 文件中使用...基本的决定可以通过使用以下内容来做出:

@Mojo( name = "xxxx", requiresProject = true,... )

所以 requiresProject 意味着你需要有一个 pom.xml 这意味着不能通过 CLI 调用。

如果省略此选项,您将有机会使用 CLI 中的目标。所以最好使用一个旨在从 CLI 调用的目标和另一个旨在从 pom.xml ..

调用的目标

此外,要注入 MavenProject,您应该这样做:

@Parameter( defaultValue = "${project}", required=true, readonly=true)
private MavenProject project;

因为 MavenProject 不是 @Component。除此之外,我总是不了解您关于 test:test:jar:1 的信息...我感兴趣的是您要编写哪种插件?

我觉得这个问题回答得还不够。我的建议是:

@Component
private MavenSession mavenSession;

boolean insideMavenProject = mavenSession.getRequest().isProjectPresent()