Как остановить Maven 2.x от попыток получить несуществующие файлы pom.xml для зависимостей, которые каждый сборщик создает?
В моем проекте есть ряд зависимостей, которые транзитивно включены из других зависимостей, у которых нет файлов pom.xml, доступных в любом из наших корпоративных хранилищ. Это внутренние библиотеки jar-only, поддерживаемые различными командами, которые были загружены в хранилища для удобства из команд, отличных от Maven, однако эти хранилища, к сожалению, не мои, чтобы играть.
Для этих зависимостей Maven настаивает на том, чтобы пытаться извлекать помов из каждого моего списка репозитория каждый раз, когда я запускаю сборку, или mvn dependency:list
. Это означает, что maven пытается извлечь 8x pom файлы из 7 разных мест репозитория, и это связано с глобальной корпоративной глобальной сетью; это очень медленно.
например. для одной конкретной зависимости
C:\Working\dev\workspace\project>mvn dependency:list
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building project
[INFO] task-segment: [dependency:list]
[INFO] ------------------------------------------------------------------------
[WARNING] Unable to get resource 'aGroupId:anArtifactId:pom:4.0.14i' from repository inhouse (http://someRepo1/proximity/repository/inhouse): While configuring wagon for 'inhouse': Unable to apply wagon configuration.
Downloading: http://someRepo1/proximity/repository/extFree/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository extFree (http://someRepo1/proximity/repository/extFree)
Downloading: http://someRepo1/proximity/repository/externalNonFree/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository extNonFree (http://someRepo1/proximity/repository/externalNonFree)
Downloading: http://someRepo2/efs/dist/maven/maven2-repository/incr/common/lib/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository efsRepo (http://someRepo2/efs/dist/maven/maven2-repository/incr/common/lib)
Downloading: http://someRepo2/efs/dist/btijava/maven2-repository/incr/common/lib/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository efsBTI (http://someRepo2/efs/dist/btijava/maven2-repository/incr/common/lib)
Downloading: http://someRepo3/maven/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository internal.repo (http://someRepo3/maven)
Downloading: http://repo1.maven.org/maven2/aGroupId/anArtifactId/4.0.14i/anArtifactId-4.0.14i.pom
[INFO] Unable to find resource 'aGroupId:anArtifactId:pom:4.0.14i' in repository central (http://repo1.maven.org/maven2)`
...
etc
...
[INFO] [dependency:list {execution: default-cli}]
[INFO]
[INFO] The following files have been resolved:
... etc
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20 seconds
[INFO] Finished at: Tue Jan 26 15:01:48 CST 2010
[INFO] Final Memory: 31M/74M
[INFO] ------------------------------------------------------------------------
С другой стороны, для POM, которые являются просто недействительными (например, более ранняя версия modelVersion или поврежденный/недействительный XML), он просто проверяет мое местное репо, жалуется на недействительность и затем продолжает. Это нормально; по крайней мере, это не повторяет попытку через WAN.
Есть ли способ (настройка, переопределение, изменение конфигурации репозитория). Я могу предотвратить повторное создание зависимостей плагина/артефакта зависимостей Maven от попыток найти отсутствующие POM, если у него уже есть файл jar в локальном репо?
Технические характеристики:
Maven 2.2.1 (определения плагина по умолчанию superPOM)
JDK 1.6.0_18
Ответы
Ответ 1
Ответ на Pascal верен для двух обходных решений локальной сборки. Однако, ваш лучший вариант - попросить владельцев этих проектов создать POM для артефактов. Они не должны быть сложными, простая альтернатива, которую Maven использует внутри себя, будет работать:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>aGroupId</groupId>
<artifactId>aArtifactId</artifactId>
<version>4.0.14i</version>
</project>
Ответ 2
Загрузка POM на самом деле является центральной концепцией в Maven для поддержки транзитивных зависимостей (на самом деле зависимость не просто JAR, см. 3.5.5. Maven Dependency Management для получения подробной информации об этом), поэтому я не знаю, можете ли вы предотвратить это.
Конечно, правильная вещь - это исправить основную причину проблемы. Но если вы не можете, возможно, вы можете запустить свою сборку в автономном режиме (используя опцию -o
). Или, может быть, вы могли бы просто "установить" артефакты в вашем локальном репозитории, используя install:install-file
и проинструктировать плагин для создания pom для них, используя generatePom
необязательный параметр (но это, очевидно, не очень хорошо масштабируется).
Ответ 3
Настройте репозиторий Nexus (или аналогичный) и загрузите там артефакты. Nexus автоматически создаст базовые помпы для выгружаемых артефактов.
Ответ 4
- загрузка на локальное репо
- настройка связи и загрузка
- работает в автономном режиме
возможно, лучшая идея - избавиться от maven полностью, это ужас!