Двоичное Различие в файле Zip/Банки

Я думаю, что вам здесь нужен глубокий клон вашего многомерного массива. Похоже, вы просто копируете ссылки вместо значений.

Оператор распространения ([...]) не выполняет глубокое клонирование, поэтому объекты, которые он копирует, будут содержать ссылки.

У Lodash есть отличная функция cloneDeep: https://lodash.com/docs/4.17.11#cloneDeep

или вы можете написать одну из своих.

8
задан Mike Miller 15 April 2009 в 20:32
поделиться

4 ответа

Хорошо, мы с коллегой нашли решение, которое работает для нас.

Вместо реинжиниринга всего процесса сборки, чтобы не удалять файлы классов или jar, мы используем следующую процедуру:

  1. Создание новых артефактов.
  2. Использование jardiff (часть jnlp ) для сравнения изменений из предыдущих build.
  3. Если diff-jar, который создает jardiff, не имеет изменений, возьмите артефакт из предыдущей сборки.

Да, я знаю, это звучит глупо, но это наверняка лучше, чем переписывать скрипт сборки, чтобы принять это во внимание. Также,

1
ответ дан 5 December 2019 в 20:18
поделиться

У меня была похожая проблема, и, как подсказывает pjz, я решил ее, «прикоснувшись» к файлам перед добавлением их в банку (так что у меня это сработало :-)). Вы можете найти сенсорный экран для Windows, если вам это нужно, в GNU Windows Utilities, утилитах ядра: http://gnuwin32.sourceforge.net/packages/coreutils.htm , но это большой пакет для только эту единственную (хотя есть много других полезных утилит, которые вам могут понравиться), или, альтернативно, загрузите что-то вроде http://www.softpedia.com/progClean/Touch-for-Windows-Clean-41086.html .

1
ответ дан 5 December 2019 в 20:18
поделиться

Я не думаю, что есть способ заставить zip делать это, но вы, безусловно, могли бы установите временные метки файлов в файловой системе на известную дату (используя команду 'touch' в unix - я не знаю, что в Windows), прежде чем создавать банку.

1
ответ дан 5 December 2019 в 20:18
поделиться

Двоичная разница из-за отметки времени файлов манифеста. Если вы позволите jar создать сам манифест, он создаст манифест на the fly и установите для созданного манифеста значение currentTimeMillis.

Вы можете решить эту проблему следующим образом:
1. Не добавляйте манифест (если вы используете ant, вы должны использовать zip вместо jar)
2. Добавьте манифест, как если бы вы добавляли обычные файлы. (Итак, манифест - это файл в вашей файловой системе, и он не создается на лету)

3
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: