-f
可以使用允许您指定任意pom.xml
文件的选项来调用 Maven 。
从自定义 Maven 插件 mojo 中,是否可以确定 Maven 是以这种方式调用还是使用pom.xml
当前工作目录中的默认值?
我正在寻找类似的东西:
this.project.isInvokedWithNonDefaultPom()
-f
可以使用允许您指定任意pom.xml
文件的选项来调用 Maven 。
从自定义 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_FILE)
源码可以通过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