Сгенерируйте файл контрольной суммы 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, что не имеет смысла.

Собираетесь ли вы распределить это в диспетчер репозитория или в центральный сервер? Если это так, SHA-512 не будет работать, потому что они не могут быть использованы кем-либо ...

khmarbaise 26.10.2018 08:32

@khmarbaise Я хочу развернуть на сервере артефактов. Но контрольная сумма sha512 предназначена в первую очередь для загрузки файлового ресурса. Я мог бы предоставить файл во втором месте, независимо от плагина maven-publish, но это потребует изменений в нашей конфигурации сборки. И этого я хочу избежать. Однако на данный момент sha256 будет достаточно хорош.

dpr 26.10.2018 11:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
2
2 794
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Суммируя

Вы, вероятно, не сможете настроить алгоритмы контрольной суммы, используемые 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 года назад) Спасибо за усилия, которые вы вложили в это исследование. !

dpr 26.10.2018 11:16
Ответ принят как подходящий

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

Другие вопросы по теме