2012-05-14 1 views
2

Я пытаюсь очистить локальный репозиторий зависимости от проекта, прежде чем запускать его, чтобы убедиться, что каждая требуемая зависимость находится в центральном репозитории и загружается из него.Что такое зависимость от Maven: предполагается очистить локальный репозиторий?

В папке проекта (содержащий pom.xml), я запускаю следующую команду:

mvn clean dependency:purge-local-repository -DreResolve=false -Dverbose=true 

POM проекта очень проста и просто заявленную зависимость к JUnit: JUnit: 3.8.1

вывод данной команды дают мне:

[INFO] Scanning for projects... 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building corelib-api 0.1.2-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ corelib-api --- 
[INFO] Deleting d:\Users\fpaillard\git-repositories\TEST_CORELIB\corelib-api\target 
[INFO] 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building corelib-api 0.1.2-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-dependency-plugin:2.1:purge-local-repository (default-cli) @ corelib-api --- 
[WARNING] Missing POM for junit:junit:jar:3.8.1 
[INFO] Skipping: corelib-api. It cannot be resolved. 
[INFO] Nothing to do for project: test:corelib-api:jar:0.1.2-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.953s 
[INFO] Finished at: Mon May 14 11:34:40 CEST 2012 
[INFO] Final Memory: 6M/15M 
[INFO] ------------------------------------------------------------------------ 

Когда я смотрю в локальном хранилище (путь проверяется с mvn help:effetive-settings), JUnit, ни РОМ JAR-файлы все еще находятся в .m2/repository/junit/junit/3.8.1 папка.

Это не dependency:purge-local-repository Предполагается удалить его?

Я не понимаю ПРЕДУПРЕЖДЕНИЕ вышеприведенного вывода. Почему junit: junit: jar: 3.8.1 POM отсутствует? Он по-прежнему присутствует в .m2/repository/junit/junit/3.8.1/junit-3.8.1.pom

Проблема связана с линией INFO Skipping: corelib-api. It cannot be resolved.? corelib-api - это имя артефакта проекта, в котором я бежал mvn dependency:purge-local-repository против.

+0

Работает ли mvn чистый пакет без предупреждения? Кроме того, чтобы проверить это, лучше всего просто удалить весь локальный репозиторий и сделать mvn чистый пакет ... если это работает нормально, все в порядке, иначе что-то пропущено. Этот вид проверки обычно должен выполняться системой CI (называемой: * clean build *). После перечитывания документов это говорит. Это приведет к повторному решению проблем вашего проекта. Существует возможность подавить это (http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html). – khmarbaise

+0

@khmarbaise 'mvn clean package' работает без предупреждения до и после подавления локальной папки репозитория. Я активировал опцию, чтобы избежать повторного разрешения зависимостей ('-DreResolve = false') –

ответ

2

Я знаю, что это старый, но у меня была такая же проблема, и добавление -DactTransitively = false в командную строку исправил эту проблему. Я не могу сказать, почему это помогло, но это произошло ...

Надеюсь, это поможет.

0

Если посмотреть на документацию, отключив опцию actTransitively, цель чистки должна только очистить зависимости, имена которых указаны непосредственно вашим pom.xml. Когда настало время для сборки, Maven автоматически вытягивает не только ваши прямые зависимости, но и все зависимости TRANSITIVE к вашему местному репо.

Когда цель чистки ищет, что нужно удалить, если она находит другие зависимости в потах зависимостей, она передает эти зависимости, чтобы выяснить все дерево в вашем локальном репозитории, которое можно очистить. Для этого ему, по крайней мере, нужен pom.xml переходного проекта. Если он не может найти его в локальном репо или если он думает, что может быть более поздняя версия для анализа, он пойдет во внешние хранилища, чтобы найти его.

Я не думаю, что на самом деле он пытается загрузить полный контент проекта, прежде чем он начнет чистку. Но поскольку он по крайней мере вытаскивает файлы pom.xml проектов, он будет жаловаться, если он не сможет найти его так, как если бы он решал зависимости для фактической сборки.

Помимо того, что Maven не имеет доступа к внешним хранилищам при очистке, может возникнуть другая практическая причина, если у вас есть два проекта, которые имеют одинаковую транзитивную зависимость, и вы не хотите, чтобы очистка от одного влияла на производительность другого (так как последнему придется загружать любые отсутствующие зависимости снова).

С другой стороны, следует тщательно рассмотреть, что если вы НЕ разрешаете чистке рассматривать все возможные транзитивные зависимости, вы должны оставить набор зависимостей нисходящего потока, сидящих в вашем локальном репозитории, которые в противном случае у вас были бы хотел удалить.

Я мог бы сделать вывод, что вывод, который вы получаете, либо не нужен, либо может быть предотвращен другим флагом, например «reportInaccessibleDependencies = false». Но, если он не убил вашу сборку, я бы не сказал, что это может волноваться.