0

-f可以使用允许您指定任意pom.xml文件的选项来调用 Maven 。

从自定义 Maven 插件 mojo 中,是否可以确定 Maven 是以这种方式调用还是使用pom.xml当前工作目录中的默认值?

我正在寻找类似的东西:

this.project.isInvokedWithNonDefaultPom()
4

2 回答 2

1

与此选项相关的 Maven 源代码为:

./maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
./maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java

(寻找关键字 ALTERNATE_POM_FILE)

源码可以通过git获取:

git clone https://git-wip-us.apache.org/repos/asf/maven.git

代码的一部分使用以下

if (commandLine.hasOption(CLIManager.ALTERNATE_POM_FILE))

以前从未尝试过,但也许有一种方法可以通过插件 Mojo 来做同样的事情

于 2013-06-25T00:41:31.140 回答
0

除了 gerrytan 的回答之外,还有一个名为的对象MavenExecutionRequest,它通过 填充命令行信息org.apache.maven.cli.MavenCli,并且可以在插件 Mojo 中通过MavenSession.getRequest().

但是,正如下面的内部代码片段org.apache.maven.cli.MavenCli所示,是否使用 '' 调用的事实-f丢失了,因为 Pom 文件作为填充MavenExecutionRequest.

所以答案是:不,不可能从 Maven 插件 mojo 中知道 pom.xml 是如何指定的。

private MavenExecutionRequest populateRequest( CliRequest cliRequest )
{
    MavenExecutionRequest request = cliRequest.request;
    .....
    String alternatePomFile = null;
    if ( commandLine.hasOption( CLIManager.ALTERNATE_POM_FILE ) )
    {
        alternatePomFile = commandLine.getOptionValue( CLIManager.ALTERNATE_POM_FILE );
    }
    .....
    if ( alternatePomFile != null )
    {
        File pom = resolveFile( new File( alternatePomFile ), workingDirectory );

        request.setPom( pom );
    }
    else
    {
        File pom = modelProcessor.locatePom( baseDirectory );

        if ( pom.isFile() )
        {
            request.setPom( pom );
        }
    }
    .....
}

版本是 maven-embedder 3.0.x

于 2013-06-26T14:21:50.577 回答