Можно ли добавить репозиторий maven из расширения maven в Maven 3.5
Это код
project.getPluginRepositories().add(myCustomRepository);
выполнено внутри afterProjectsRead
метод расширения maven (расширение класса AbstractMavenLifecycleParticipant
) должен работать? Он работает нормально (без ошибок и предупреждений), но Maven, похоже, не учитывает хранилище, и сборка завершается неудачно с помощью "Plugin .... или не удалось разрешить одну из его зависимостей"!
Если это невозможно, есть ли другие способы динамически добавить репо из расширения maven?
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.1.1</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
скорее, чем MavenLifecycleParticipant
но я думаю, это должно работать в afterProjectsRead
тоже.
ВНИМАНИЕ: Это, вероятно, не то, что Maven ожидает от вас, и может сломать некоторые плагины. Например maven-shade-plugin
работает в основном нормально, но ломается (и не в состоянии сборки) при попытке создать уменьшенное POM, когда репозитории добавляются таким образом.