【问题标题】:Howto detect that maven plugin is executed inside maven project?如何检测 maven 插件在 maven 项目中执行?
【发布时间】:2016-03-29 18:00:52
【问题描述】:

我想很好地识别是否从 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项目内部还是外部执行?


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

【问题讨论】:

    标签: java maven maven-plugin


    【解决方案1】:

    我觉得这个问题没有得到足够的回答。我的建议是:

    @Component
    private MavenSession mavenSession;
    
    boolean insideMavenProject = mavenSession.getRequest().isProjectPresent()
    

    【讨论】:

    • 谢谢,为什么这段代码需要maven-compat作为提供的依赖项?
    • @MariuszS,我不熟悉 maven-compat。我的插件依赖于 maven-plugin-annotations 3.4 和 maven-core 3.3.3
    【解决方案2】:

    重要的是你清楚地决定哪个目标应该只从 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 的信息……我感兴趣的是你想​​写什么样的插件?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2023-01-24
    • 2019-10-20
    • 2018-08-17
    相关资源
    最近更新 更多