Как исправить неправильные контрольные суммы в репозитории Nexus?

некоторые артефакты в моем локальном репозитории Nexus не имеют правильной контрольной суммы. Например (неправильная контрольная сумма):

cat central/org/codehaus/plexus/сплетение-компилятор-api/1.8 / сплетение-компилятор-api-1.8.ПФЛ.в SHA1 95f3332c2bbace129da501424f297e47dd0e976b

vs (правильная контрольная сумма):

sha1sum central/org/codehaus/plexus/сплетение-компилятор-api/1.8 / сплетение-компилятор-api-1.8.ПФЛ 4c2947f7e2d09b6e13da34292d897c564f1f9828

похоже, у меня есть несколько артефактов в моем репозитории, которые были загружены, когда эта ошибка была активной.

Maven Central имеет правильную контрольную сумму (4c29...) теперь, но контрольные суммы в моем локальном репозитории Nexus остаются устаревшими. Я не знаю, как заставить мой локальный репозиторий проверить и / или повторно загрузить правильную контрольную сумму из central.

каков правильный способ исправления моего локального хранилище. С этой проблемой не так много артефактов, поэтому я думаю, что могу (вручную) проверить, что они все еще существуют в central и удалить их из моего локального репозитория. Они должны быть повторно кэшированы с правильными контрольными суммами. Есть ли лучший способ?

обновление:

Я посмотрел на это больше, и я почти уверен, что знаю, в чем источник моей проблемы. Один из артефактов, с которым у меня проблемы, это (сплетение-компилятор-api: 1.8):

в моем репозитории, как .пом и .ПФЛ.sha1 помечены как 29-Mar-2010. В Центральном,.pom помечен как 29-Mar-2010 в то время как .ПФЛ.sha1 помечен как 21-Apr-2010. Я читал о обслуживание Nexus. Я предполагаю, что 21-Apr-2010 Maven Central перестроил метаданные и проверил контрольные суммы, которые исправили неправильные .sha1 для plexus-compiler-api:1.8 артефакт.

по Ссылка Sonatype выше, я должен быть в состоянии истечь кэши для Maven Central и моя локальная установка вытащить новые копии чего-либо с более новыми метками времени, чем первоначально кэшированные артефакты. Однако, основываясь на поведении, которое я наблюдал, я думаю, что это только проверка временных меток для файлов артефактов, а не файлов контрольной суммы.

Что касается моего локального репозитория Nexus, у меня есть самая последняя версия артефакта (29-Mar-2010), поэтому нет необходимости повторно загружать что угодно.

Я заметил, что моя версия Nexus довольно старая (1.5 против 1.9.1), поэтому я попробую обновить и посмотреть, делает ли более новая версия лучшую работу с истекающими кэшами. Если нет, я, вероятно, увижу, что думают парни Сонатайпа (может быть, это ошибка?).

2 ответов


нет, то, с чем вы сталкиваетесь, - это определенное поведение Nexus и Maven.

во-первых, истекающие кэши ничего не удаляют из локального кэша Nexus, он просто помечает их "старыми". Эффект маркировки элементов как " старых "отображается при следующем входящем запросе, запрашивающем те же артефакты (если никогда не спрашивали," старые " артефакты просто сидят там). Это означает, что только кэш expire не заставит Nexus загружать удаленно измененные (новые) файлы. Nexus никогда не загружается самостоятельно (если мы оставим индекс из этого обсуждения). Вы должны заставить клиента (Maven) запросить их – и это приведет к следующей цепочке действий: "кэширование содержимого старого", обнаружение удаленных изменений и, наконец, повторная загрузка и кэширование нового файла.

далее, здесь происходит то, что Maven, поскольку артефакт (файл JAR) не изменяется, даже не запрашивает файл контрольной суммы, следовательно, ничто не "запускает" "старую" отмеченную контрольную сумму refetch на стороне Nexus. Другое отметить, если говорить об освобожденном артефакте (и Maven Central содержит только выпущенные артефакты), Maven никогда не будет перепроверять их, если они не присутствуют в локальном репозитории (после ввода в локальный репозиторий Maven никогда не будет пытаться их перепроверить). Это означает, что вам нужно удалить их из локального репозитория, чтобы быть уверенным, что Maven попросит их из Nexus, и, наконец, что Nexus обнаружит изменения файла контрольной суммы на удаленном и сделает то, что вы действительно хотите.

повторная загрузка должна произойти, например, если вы Локальный репозиторий Maven и перестроить с чистым/пустым. В этом случае Maven должен запросить как jar artifact, так и checksum – файл-но из вашего описания не ясно, как вы (или вы?) вызовите Maven после истечения кэшей на Nexus.

попробуйте это:

a) запустить кэш истечения срока действия на Nexus" Maven Central " репозиторий прокси

b) nuke local repository (или просто перенаправьте его в новую чистую папку, изменив ~/.м2/настройки.в XML

c) сделать Maven создайте свой проект, и он должен восстановить оба файла JAR и checksum (используя пустой / nuked локальный репозиторий)

надеюсь, что это объясняет некоторые вещи, которые вы написали.

ссылка Jira вопрос обсуждения же.


Это была ошибка.

Как объяснил Tamas, когда срок действия кэша прокси-репозитория истек, Nexus проверит удаленный репозиторий на наличие новых временных меток. Локально кэшированные артефакты по существу помечены как грязные, и проверка обновленных артефактов происходит по требованию, поскольку артефакты запрашиваются с локального сервера Nexus.

Nexus (1.9.1) делает предположение, что если временная метка артефакта не изменилась, контрольные суммы также должны быть неизменными. Большинство время это будет верно, но из-за старой ошибки в Maven, которая развертывала артефакты с неправильными контрольными суммами, есть редкие случаи, когда артефакт может быть неизменным, но иметь обновленную контрольную сумму.

Я думаю, что лучший способ справиться с этим сейчас - переместить любые плохие контрольные суммы и позволить Nexus попытаться повторно разрешить их в следующий раз, когда они будут запрошены:

MV plexus-компилятор-api.ПФЛ.SHA1 plexus-компилятор-api-1.8.ПФЛ.в SHA1.бак!--1-->

Спасибо за помощь Тамас.