LINUX.ORG.RU

Различный хеш-код у двух jar-ников

 , , ,


0

1

Всем привет! Столкнулся с такой проблемой. Есть проект, который я собираю в Idea, получаю jar-ник. Также этот же проект я собираю в Jenkins, тоже получаю jar-ник. Мне необходимо, чтобы то, что я собираю Idea и то, что собирает Jenkins имело одинаковую md5-сумму. Чтобы это было так, то я добавляю

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
                        <addMavenDescriptor>false</addMavenDescriptor>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
Т.е я подкладываю один MANIFEST.MF, с фиксированными строками:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: SomeUser
Created-By: Apache Maven
Build-Jdk: 1.8.0_60
И выпиливаю из jar-ника всякие pom-ы. Все было бы отлично, но jar-ники все равно различаются. Почему-то после сборки Jenkins-ом я получаю на выходе
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver

Built-By: SomeUser
Created-By: Apache Maven
Build-Jdk: 1.8.0_60
Т.е он меняет строки местами и добавляет пустую в середину. При этом даже бинарные файлы некоторые различны(не все, в моем случае - два). Соответственно, хешы различны у джарников.А мне крайне необходимо, чтобы они были одинаковы, если src-код не изменялся. Посоветуйте что делать, господа!


А что мешает в обоих случаях использовать один и тот же билд файл?

anonymous
()
Ответ на: комментарий от wakuwaku

Это же костыль. Почему бы просто не использовать одну систему сборки и общий скрипт сборки? Я с Jenkins не встречался и вообще с Java давно не сталкивался, но вроде Jenkins имеет Maven плагин (как я понял из поста в Idea используется Maven для сборки).

anonymous
()

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

aarexer
() автор топика
Ответ на: комментарий от aarexer

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

f1xmAn ★★★★★
()
Ответ на: комментарий от phoenix

Т.е мы в принципе не можем собрать два одинаковых джарника?С одним и тем же исходным кодом и хешем?

aarexer
() автор топика
Ответ на: комментарий от wakuwaku

Нет, там после каждой строки стоит перевод строки. Вообще, реально ли собрать два джарника с одинаковым хешем? Потому что помимо манифеста еще меняется несколько классов.

aarexer
() автор топика
Ответ на: комментарий от aarexer

в принципе конечно можем. Например, bazel (bazel.io) умеет reproducible builds. Получится ли оттюнить два разных тула, чтобы они производили предсказуемый результат, это другой вопрос. Конкретно проблему с таймстэмпом можно решить перепаковкой jar с предварительной установкой времени в какой-нть конкретное значение. Но могут быть и другие источники нестабильности.

phoenix ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.