0

-fMaven は、任意のファイルを指定できるオプションで呼び出すことができpom.xmlます。

カスタム 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示すように-fMavenExecutionRequest.

答えは次のとおりです。いいえ、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 に答える