发现的一个bug工具包是maven-gpg-plugin包;
因为此包执行逻辑有坑,他是按照口令顺序从前到后执行的。
举例:我要上传jar包到maven中央仓库。按照要求我应该生成XX.jar、XX-source.jar、XX-javadoc.jar 以及他们对应的XX.jar.asc、XX-source.jar.asc、XX-javadoc.jar.asc签名文件。
经测试,如果使用口令
mvn clean javadoc:jar source:jar install gpg:sign
可以正常生成全套的符合规定的包及签名。
但是我需要上传,也就是deploy命令。
当使用语句
mvn clean javadoc:jar source:jar deploy gpg:sign
时,发现了bug。deploy执行时将生成的XX.jar、XX-source.jar、XX-javadoc.jar 上传到仓库中,然后本地生成了签名,未进行上传。
这时,我测试了调整顺序,将gpg:sign放到前面。
mvn clean javadoc:jar source:jar gpg:sign deploy
发生了情况,生成并上传的包含XX.jar、XX-source.jar、XX-javadoc.jar、XX-source.jar.asc、XX-javadoc.jar.asc,缺少了XX.jar.asc签名;这是因为签名执行时,还未生成XX.jar包。也就是说,deploy生成完直接就上传仓库了。
对于此bug无法解决,只能通过gpg包自动执行解决。
然后才是我的问题来源,纠结了好几天终于找到了问题,因为我的项目是父项目+子项目,出现问题的是子项目。后来发现因为父项目中使用pluginManagement后未在子项目中显式声明,所有我使用口令可以调用,如果不使用则默认不执行。经过修改后,问题解决。
注:pluginManagement 表示父项目指定的工具包,如果不使用口令调用,将不会自动引用。
如果需要自动执行的话,需要在子项目中显式引用。