簡體   English   中英

maven插件參數僅在執行中可用

[英]maven plugin parameter only available in execute

我正在編寫帶有參數的Maven插件。

參數已正確啟動

[DEBUG] Configuring mojo '...' with basic configurator -->
[DEBUG]   (f) includes = [subpackage]
[DEBUG]   (f) outputDirectory = /Users/username/dev/project/output
[DEBUG]   (f) sources = [/Users/username/dev/project/src/main/java/io/packagea, /Users/username/dev/project/src/main/java/io/packageb]

參數在方法execute中正確初始化,但在被調用的方法中為null :引發NullPointerException。 如果我將mojo的參數作為參數傳遞給被調用的方法,則

這里是一個示例參數:

@Parameter
private String[] includes;

我不知道為什么。

完整的代碼在我的github repo上(在功能分支上):[ 刪除分支,因為答案在問題的根源上是明確的 ]

可以在項目上使用mvn livingdoc:wordcloud調用該插件。

插件瀏覽@Wordcloud批注的代碼,但無需重現問題。

一個Maven插件由實現Mojo接口的類表示(通常extends AbstractMojo )。 它帶有這樣的注釋,以便Maven可以識別它,實例化它(創建一個新實例)並執行它(調用execute方法)。 您的情況如下所示:

@Mojo(name = "wordcloud")
public class WordCloudMojo extends AbstractMojo {

    @Parameter
    private String[] includes;

...

Maven通過將依賴項注入到類的新實例中來確保滿足依賴關系,例如,上面的includes字段。

如果您創建插件類的任何其他新實例和其他實例,則Maven不會對此進行關注,並且將無法滿足依賴關系。 在您的情況下,如下所示:

public void execute() {
    final WordCloudMojo wordCloudMojo = new WordCloudMojo();
    Arrays.stream(includes).forEach(inc -> getLog().debug(inc));
    wordCloudMojo.scan(sources);

stream(includes)仍將使用Maven注入的依賴項。 但是,由於您對WordCloudMojo的新實例調用了scan ,因此將無法滿足依賴關系(該字段可能為null )。

這樣可以解決:

final WordCloudMojo wordCloudMojo = new WordCloudMojo();
wordCloudMojo.includes = this.includes;

對不起,我沒有使用mutator方法。 this在這里是多余的,但要強調一點問題。

另一個解決方案是:不創建WordCloudMojo的新實例? Maven已經為您制作的那是什么問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM