Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在自定义Maven插件中,是否可以知道Maven是否使用'-f';?_Java_Maven_Maven Plugin - Fatal编程技术网

Java 在自定义Maven插件中,是否可以知道Maven是否使用'-f';?

Java 在自定义Maven插件中,是否可以知道Maven是否使用'-f';?,java,maven,maven-plugin,Java,Maven,Maven Plugin,可以使用-f选项调用Maven,该选项允许您指定任意pom.xml文件 在自定义Maven插件mojo中,是否可以确定Maven是以这种方式调用的,还是使用当前工作目录中的默认pom.xml 我正在寻找以下线索: this.project.isInvokedWithNonDefaultPom() 与此选项相关的Maven源代码如下: ./maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java ./maven-embed

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

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

我正在寻找以下线索:

this.project.isInvokedWithNonDefaultPom()

与此选项相关的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_文件)

源代码可以通过git获得:

git clone https://git-wip-us.apache.org/repos/asf/maven.git
代码的一部分使用以下内容

if (commandLine.hasOption(CLIManager.ALTERNATE_POM_FILE))

以前从未尝试过这一点,但也许有一种方法可以通过插件Mojo实现同样的功能。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

这看起来绝对是一条有用的路线。我想知道这两个实体是否可以通过Plexus注入插件。我会尝试一下,让你知道它是怎么回事……我决定接受这个答案,因为这是最接近的事情,也是最有用的。这听起来像是一个问题。我想你是对的:这个问题背后有一个更复杂的问题,但实际上我也对这个简单化的答案感兴趣。如果这让我一事无成,我可能最终会发布一个全新的问题,但我认为这应该与这个问题分开,因为这也可能适用于其他情况。碰巧的是,我正在编写一个自定义插件,它处理与另一个框架交互的类路径相关的复杂情况。我很确定这是一个未知的领域,我不想问一个让别人帮我写插件的问题;也不是一个没有建设性的问题。我最近问了第二个X-Y问题,是关于一个完全不同的主题,但实际上是受同一个整体问题的启发。我有点把把把这些答案放在一起创造我的最终解决方案看作是我的工作。