簡體   English   中英

Maven 插件可以自動從“執行”部分看到“配置”標簽嗎?

[英]Can a Maven plugin see the “configuration” tag from an “execution” section automatically?

我正在分析一個 Maven 插件,我可以在pluginconfiguration部分中configuration

<plugin>
     ...
     <executions>...</executions>
     <configuration>
         <!-- items placed here are visible to the MOJO -->
     </configuration>
</plugin>

該插件完全忽略execution任何配置項,但是:

<plugin>
     ...
     <executions>
         <execution>
             <id>execution1</id>
             <phase>test</phase>
             <goals><goal>test</goal></goals>
             <configuration>
                <!-- items placed here are ignored -->
             </configuration>
         </execution>
     </executions>
</plugin>

我使用mvn test運行 Maven。 我確信執行會發生,因為 Maven 正確打印了它的id ,但是沒有配置插件——打印關於不存在的錯誤設置的警告,當<configuration>部分移到<executions>之外時,這些警告不存在。

問題:是插件的實現方式,它只接受“頂級”配置嗎? 我研究了它的源代碼,在我看來,它是 Maven 在 MOJO 類上調用 setter 並且它對插件透明,選項來自哪個部分。

MOJO 注釋為:

* @component
* @goal test
* @phase test
* @execute phase="jasmine-process-test-resources"

有問題的插件正在分叉自定義生命周期。

分叉的自定義生命周期將刪除具有指定 id ( execution1 ) 的execution1 (因為它是分叉的生命周期)

因此,由分叉生命周期執行的任何插件目標都將丟失其配置。 主要的 mojo 本身應該得到配置,但出了問題的是分叉的生命周期執行。

我猜它是哪個插件,如果我猜對了,這是自定義生命周期,您看到的警告來自例如其他帶有文本的mojo

JavaScript source folder was expected but was not found. Set configuration property
`jsSrcDir` to the directory containing your JavaScript sources. Skipping 
jasmine:resources processing.

在這種情況下,您需要將<configuration>部分放在外部塊中或配置生命周期的執行。

配置生命周期的執行將需要添加具有魔術格式的id的執行。 我不是 100% 確定,但在您的情況下,您將使用default-resourcesjasmine-lifecycle-resourcesid定義附加執行,以確保配置需要。

不那么冗長的方法是將配置放在外部部分並完成它。

我在使用maven:3.6.3-jdk-8 docker 映像的基礎maven-install-plugin:2.5.2遇到了這個問題。

感謝接受的答案讓我走上正確的軌道。

我不完全理解文檔中的這個注釋(在本節的末尾),但似乎你可以給階段目標一個執行 id 強制它使用你的配置:

注意:元素內部的配置過去與外部的配置不同,因為它們不能從直接命令行調用中使用,因為它們僅在它們綁定到的生命周期階段被調用時應用。 因此,您必須將配置部分移到執行部分之外,以將其全局應用於插件的所有調用。 從 Maven 3.3.1 開始,情況不再如此,因為您可以在命令行上指定直接插件目標調用的執行 ID。 因此,如果您想從命令行運行上述插件並且它是特定 execution1 的配置,您可以執行:

mvn myqyeryplugin:queryMojo@execution1

我最后的工作 docker 命令:

docker run -it --rm --name parser -v "$(shell pwd)":/usr/src/parser -w /usr/src/parser maven:3.6.3-jdk-8 mvn -X install:install-file@install-my-jar-file

其中install-my-jar-file是我的執行 ID <execution><id>install-my-jar-file</id>...

暫無
暫無

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

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