Maven 3.5中可以从maven扩展添加maven存储库吗

问题描述 投票:0回答:2

是这个代码吗

project.getPluginRepositories().add(myCustomRepository); 

在 Maven 扩展(类扩展

afterProjectsRead
)的
AbstractMavenLifecycleParticipant
方法中执行应该可以工作吗?它执行良好(没有错误或警告),但 Maven 似乎没有考虑到存储库,并且构建失败并显示“插件......或其依赖项之一无法解析”!

如果这种方式不可能,是否有其他方法可以从 Maven 扩展动态添加存储库?

maven maven-3 maven-extension
2个回答
1
投票

另一种方法是作为

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>

0
投票

如果这种方法行不通,还有其他方法吗? 从 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
大部分工作正常,但会中断(并导致构建失败)。

© www.soinside.com 2019 - 2024. All rights reserved.