Сгенерируйте файл контрольной суммы SHA512 с помощью плагина maven-publish в gradle

Плагин 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, что не имеет смысла.


person dpr    schedule 25.10.2018    source источник
comment
Собираетесь ли вы распределить это в диспетчер репозитория или в центральный сервер? Если это так, SHA-512 не будет работать, потому что они не могут быть использованы кем-либо ...   -  person khmarbaise    schedule 26.10.2018
comment
@khmarbaise Я хочу развернуть на сервере артефактов. Но контрольная сумма sha512 предназначена в первую очередь для загрузки файлового ресурса. Я мог бы предоставить файл во втором месте, независимо от плагина maven-publish, но это потребует изменений в нашей конфигурации сборки. И этого я хочу избежать. Однако на данный момент sha256 будет достаточно хорош.   -  person dpr    schedule 26.10.2018


Ответы (2)


Gradle 6.0, выпущенный в ноябре 2019 года, по умолчанию использует SHA-256 и SHA-512 в качестве хэш-алгоритмов в своем плагине maven-publish. Видеть

Обратите внимание, что Gradle 6.0.1 добавил способ подавить использование этих новых алгоритмов, потому что некоторые серверы артефактов их не принимают:

  • https://docs.gradle.org/6.0.1/release-notes.html («Публикация контрольных сумм SHA256 и SHA512»)
  • добавьте -Dorg.gradle.internal.publish.checksums.insecure = true в интерфейс командной строки или добавьте systemProp.org.gradle.internal.publish.checksums.insecure = true в свой файл gradle.properties
person Marco Schmidt    schedule 19.11.2019

Короче

Вы, вероятно, не сможете настроить алгоритмы контрольной суммы, используемые 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 в не тестовых файлах, которые я могу найти в Репозиторий Aether состоит из трех: 1, 2, 3. Эти три класса также кажутся единственными (не тестовыми) пользователями _ 6_ метод из org.sonatype.aether.util.ChecksumUtils для вычисления контрольных сумм. Другими словами: независимо от того, какой из этих классов транзитивно используется Gradle (если только он не должен странным образом получать контрольные суммы откуда-то еще), в каждом случае алгоритмы контрольной суммы SHA-1 и MD5 жестко запрограммированы, и вы не можете их изменить. .

person Chriki    schedule 25.10.2018
comment
Отлично, новый плагин публикации maven основан на устаревшем проекте ... (github aether последний раз обновлялся 7 лет назад, а проект eclipse заархивирован и последний раз обновлялся 4 года назад) Спасибо за усилия, которые вы вложили в это исследование! - person dpr; 26.10.2018