Я думаю, что вам здесь нужен глубокий клон вашего многомерного массива. Похоже, вы просто копируете ссылки вместо значений.
Оператор распространения ([...]) не выполняет глубокое клонирование, поэтому объекты, которые он копирует, будут содержать ссылки.
У Lodash есть отличная функция cloneDeep: https://lodash.com/docs/4.17.11#cloneDeep
или вы можете написать одну из своих.
Хорошо, мы с коллегой нашли решение, которое работает для нас.
Вместо реинжиниринга всего процесса сборки, чтобы не удалять файлы классов или jar, мы используем следующую процедуру:
Да, я знаю, это звучит глупо, но это наверняка лучше, чем переписывать скрипт сборки, чтобы принять это во внимание. Также,
У меня была похожая проблема, и, как подсказывает pjz, я решил ее, «прикоснувшись» к файлам перед добавлением их в банку (так что у меня это сработало :-)). Вы можете найти сенсорный экран для Windows, если вам это нужно, в GNU Windows Utilities, утилитах ядра: http://gnuwin32.sourceforge.net/packages/coreutils.htm , но это большой пакет для только эту единственную (хотя есть много других полезных утилит, которые вам могут понравиться), или, альтернативно, загрузите что-то вроде http://www.softpedia.com/progClean/Touch-for-Windows-Clean-41086.html .
Я не думаю, что есть способ заставить zip делать это, но вы, безусловно, могли бы установите временные метки файлов в файловой системе на известную дату (используя команду 'touch' в unix - я не знаю, что в Windows), прежде чем создавать банку.
Двоичная разница из-за отметки времени файлов манифеста.
Если вы позволите jar создать сам манифест, он создаст манифест на
the fly и установите для созданного манифеста значение currentTimeMillis.
Вы можете решить эту проблему следующим образом:
1. Не добавляйте манифест (если вы используете ant, вы должны использовать zip вместо jar)
2. Добавьте манифест, как если бы вы добавляли обычные файлы. (Итак, манифест - это файл в вашей файловой системе, и он не создается на лету)