是这个代码吗
project.getPluginRepositories().add(myCustomRepository);
在 Maven 扩展(类扩展
afterProjectsRead
)的 AbstractMavenLifecycleParticipant
方法中执行应该可以工作吗?它执行良好(没有错误或警告),但 Maven 似乎没有考虑到存储库,并且构建失败并显示“插件......或其依赖项之一无法解析”!
如果这种方式不可能,是否有其他方法可以从 Maven 扩展动态添加存储库?
另一种方法是作为
EventSpy
进行监听,然后在我们可以定义自定义存储库的范围内注入 项目级别设置。
例如,
在
${basedir}/.mvn/extensions.xml
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.github.gzm55.maven</groupId>
<artifactId>project-settings-extension</artifactId>
<version>0.3.5</version>
</extension>
</extensions>
在
${basedir}/.mvn/settings.xml
<settings>
<mirrors>...</mirrors>
<profiles>
<profile>
<repositories/>
</profile>
</profiles>
</settings>
如果这种方法行不通,还有其他方法吗? 从 Maven 扩展动态添加存储库?
它缝合了这个代码
List<ArtifactRepository> pluginRepos = new LinkedList<>();
pluginRepos.addAll(project.getPluginArtifactRepositories());
pluginRepos.add(myCustomRepository);
project.setPluginArtifactRepositories(pluginRepos);
有效。这是来自 ExecutionListener
的
example,而不是
MavenLifecycleParticipant
,但我想它也应该适用于 afterProjectsRead
。
警告:这可能不是 Maven 希望您做的事情,并且可能会破坏一些插件。例如,当以这种方式添加存储库时,在尝试生成简化的 POM 时,
maven-shade-plugin
大部分工作正常,但会中断(并导致构建失败)。