Я в процессе оценки maven для создания программного обеспечения компании. Особый случай, который я имею, заключается в том, что все артефакты, которые разрешены для использования в производстве, ограничены.maven исключить плагин из зависимостей проекта от определения хранилища
Утвержденные библиотеки поддерживаются специальной репозиторией (в экземпляре Artifactory).
Хотя конечный продукт ограничен, мы можем использовать больше зависимостей для построения (плагины maven и их зависимости имеют меньшие ограничения).
Итак, я сконфигурировал раздел repository
в пом и pluginRepository
.
Проблема в том, что все разрешенные артефакты (для плагинов и для проекта) кэшируются только в одном локальном репозитории/папке. Если кто-то случайно добавляет зависимость компиляции к любому из проектов, которые находятся только в кеше из-за плагина maven, он будет использоваться без предупреждения.
Я удалил локальный репозиторий и перекомпилировал протестированный проект, а сборка завершилась неудачно, как ожидалось, с неразрешимой зависимостью.
Я искал в Интернете и не нашел конкретного ответа на этот вопрос. Существует ожидающий запрос на мавена отделить локальные кэши для каждого хранилища, но это, кажется, только в обзор для Maven 4 государства: https://cwiki.apache.org/confluence/display/MAVEN/Local+Repository+Separation
https://issues.apache.org/jira/browse/MNG-3655 https://issues.apache.org/jira/browse/MNG-4302
The Maven-силовика-плагин имеет вид концепции здесь с bannedDependencies, но для этого требуется обширная конфигурация, и я хотел бы идти в ногу с одобренными в настоящее время релизами без ручного взаимодействия.
Любые идеи по этому поводу? Я пропустил конфигурацию?
Update1:
Ну даже пытаться перечислить все разрешенные в зависимости Инфорсер плагин не работает для меня:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedDependencies>
<excludes>
<exclude>*:*</exclude>
</excludes>
<includes>
<include>commons-io:commons-io:1.4</include>
...
</includes>
</bannedDependencies>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
Моделировочная должен терпеть неудачу здесь, но [INFO] BUILD SUCCESS
.
Update 2:
Что еще более удивительно, что в документации Maven вопрос уже адресован быть зафиксированы изменения в версии 3: https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes#Maven3.xCompatibilityNotes-ResolutionfromLocalRepository
Разрешение от местного Repository The локальный репозиторий, используемый Maven 3.x, был расширен, чтобы отслеживать, с каких удаленных репозиториев был устранен артефакт. Эта информация о происхождении артефакта используется для обеспечения того, чтобы сборщики могли получать доступ к локально кэшированным артефактам, если у них настроены соответствующие репозитории. Следовательно, проекты, которые не имеют требуемых удаленных репозиториев в POM, могут не работать при создании с Maven 3. Это улучшает воспроизводимость сборки, устраняя последствия непреднамеренного совместного использования артефактов через локальный репозиторий.
Я бы проверял artifactory, если у него есть какая-то закупка (термин nexus), который решает эту проблему ... буквально определение этого в сборке maven не имеет смысла, потому что любой, кто может изменить файл pomfile, может изменить это. .., который не имеет смысла в конце ... – khmarbaise
, поскольку я понимаю, что функция закупок позволяет переключить удаленное зеркало в автономный режим, поэтому новые зависимости не загружаются. Это то, что у меня уже есть - у меня есть репозиторий, содержащий все артефакты, которые одобрены для использования в производственных приложениях. Проблема в том, что для сборки maven требуется больше артефактов, чтобы заставить работать плагины, и эти зависимости смешиваются на стороне клиента, что приводит к сбоям, которые могут включать в себя артефакты, которые не могут использоваться. Мне нужно строгое разделение артефактов, используемых maven и артефактами, используемыми компилятором. – dag
Maven, конечно, использует артефакты. К компилятору вы имеете в виду JDK? В противном случае это не имеет смысла, потому что maven-compiler-plugin также нуждается в артефактах, иначе вы не сможете скомпилировать свой код. Из этого можно установить параметры settings.xml с разделенными maven-плагинами и другими артефактами, которые обычно не выполняются. – khmarbaise