Плагин maven-publish
по умолчанию генерирует файлы контрольной суммы MD5 и SHA1 для всех артефактов. Но есть ли способ заставить плагин генерировать безопасные файлы контрольной суммы (предпочтительнее SHA512)?
Это довольно легко воспроизвести. Я только что инициализировал новый проект java-library
и добавил плагин maven-publish
и его конфигурацию.
build.gradle:
apply plugin: 'java'
apply plugin: 'maven-publish'
repositories {
jcenter()
}
dependencies {
}
publishing {
repositories {
maven {
url rootProject.buildDir.path + '/repo'
}
}
publications {
mavenJava(MavenPublication) {
groupId = 'org.gradle.sample'
artifactId = 'project1-sample'
version = '1.1'
from components.java
}
}
}
Я уже консультировался с документацией gradle и javadoc, но не смог найти никаких подсказок по файлам контрольной суммы. Я знаю, что могу довольно легко сгенерировать контрольные суммы для артефактов, используя задачу контрольной суммы ANT, подобную этой
doLast {
ant.checksum(file: archivePath, algorithm: "SHA-512")
}
Но мне как-то нужно было бы поместить их в правильную папку, в стороне от фактических артефактов «вручную», чего я бы хотел избежать.
РЕДАКТИРОВАТЬ:
Если невозможно указать алгоритм контрольной суммы, возможно ли каким-то образом подключиться к задаче publish
и добавить настраиваемый файл контрольной суммы в папки назначения артефактов? Я не хочу добавлять сами файлы контрольных сумм как артефакты, поскольку для контрольных сумм будут контрольные суммы MD5 и SHA1, что не имеет смысла.
@khmarbaise Я хочу развернуть на сервере артефактов. Но контрольная сумма sha512 предназначена в первую очередь для загрузки файлового ресурса. Я мог бы предоставить файл во втором месте, независимо от плагина maven-publish
, но это потребует изменений в нашей конфигурации сборки. И этого я хочу избежать. Однако на данный момент sha256 будет достаточно хорош.
Вы, вероятно, не сможете настроить алгоритмы контрольной суммы, используемые maven-publish
, поскольку они кажутся жестко запрограммированными.
Gradle использует Sonatype Aether из org.gradle.api.publication.maven.internal.action.MavenDeployAction
для публикации в репозиториях Maven. Вы можете найти ссылка для этого класса в журнале отладки вашей сборки:
23:23:23.232 [INFO] [org.gradle.api.publication.maven.internal.action.MavenDeployAction] Deploying to file:/tmp/foobar/build/repo/
Похоже, что в DeployRequest
в Aether нет алгоритмов контрольной суммы. Другими словами, Эфир как-то сам выбирает алгоритмы.
Глядя на это со стороны эфира, единственные ссылки на sha1
в нетестовых файлах, которые я могу найти в Хранилище эфира, это три: 1, 2, 3. Эти три класса также кажутся единственными (не тестовыми) пользователями calc
метод org.sonatype.aether.util.ChecksumUtils
для вычисления контрольных сумм. Другими словами: независимо от того, какой из этих классов транзитивно используется Gradle (если только он не должен странным образом получать контрольные суммы откуда-то еще), в каждом случае алгоритмы контрольной суммы SHA-1 и MD5 жестко запрограммированы, и вы не можете их изменить. .
Замечательно, что «новый» плагин публикации maven основан на устаревшем проекте ... (github aether последний раз обновлялся 7 лет назад, а проект eclipse заархивирован и последний раз обновлялся 4 года назад) Спасибо за усилия, которые вы вложили в это исследование. !
Gradle 6.0, выпущенный в ноябре 2019 года, по умолчанию использует SHA-256 и SHA-512 в качестве хэш-алгоритмов в своем плагине maven-publish. Видеть
Обратите внимание, что Gradle 6.0.1 добавил способ подавить использование этих новых алгоритмов, потому что некоторые серверы артефактов их не принимают:
Собираетесь ли вы распределить это в диспетчер репозитория или в центральный сервер? Если это так, SHA-512 не будет работать, потому что они не могут быть использованы кем-либо ...