Zastanawiam się nad sprawdzeniem wartości mieszania pliku jar, aby ustalić, czy uległa ona zmianie, ale okazuje się, że ten sam plik JAR ma różne hashe za każdym razem, gdy go kompiluję (eksportuj jako plik JAR z zaćmienia lub skompiluj go przy użyciu maven). Usunąłem wartości daty pliku manifestu i takie tam, ale nadal jest inaczej. Czy jest coś w generowaniu kodu bajtowego, które zawiera znacznik czasu lub coś takiego?Dlaczego ten sam plik JAR ma różny skrót za każdym razem, gdy go buduję?
Odpowiedz
Plik JAR jest plikiem ZIP i zawiera datę ostatniej modyfikacji w nagłówku pliku katalogu local file headers. Doprowadzi to do różnych skrótów twoich buildów.
Jeśli uruchomisz polecenie JAR na dokładnie tym samym zestawie plików (z tymi samymi datami pliku) i pominiesz utworzenie pliku manifestu, to powinien on podać dokładnie ten sam plik JAR (jeśli kolejność plików wewnątrz ZIPa się nie zmienia) .
Czy istnieje sposób, aby powiedzieć, aby zignorować daty plików? Lub usunąć je z nagłówków? – user218046
@ user218046 Wydaje się niemożliwe. Ale poleciłbym przejść na inny sposób generowania skrótu, np. użyj zadania sumy kontrolnej w plikach przed umieszczeniem ich w pliku JAR, https://ant.apache.org/manual/Tasks/checksum.html – wero
Wygląda na to, że jest uzasadniony. Dziękuję za odpowiedź. – user218046
- 1. boost :: random generuje ten sam numer za każdym razem
- 2. std :: random_shuffle produkuje sam rezultat za każdym razem
- 3. Dlaczego otrzymuję ostrzeżenie za każdym razem, gdy używam malloc?
- 4. Dlaczego Travis CI pobiera wszystko za każdym razem, gdy buduje?
- 5. rand() zwraca ten sam numer za każdym razem program jest uruchamiany
- 6. Pusty biały ekran za każdym razem, gdy uruchamiam symulator iOS
- 7. dlaczego cykl setInterval() staje się szybszy za każdym razem?
- 8. zamień ten sam skrót na innosetup na pulpicie
- 9. cmake & gcc kompiluje każdy plik za każdym razem
- 10. Czy w Perlu można bezpiecznie usunąć klucz ze skrótu, gdy uruchamiam ten sam skrót? I dlaczego?
- 11. Dlaczego ten generator python zwraca tę samą wartość za każdym razem?
- 12. Jak naprawić "nieaktualny" projekt studio graficznego za każdym razem, gdy go uruchamiam.
- 13. XCode 4.6.3 awarii za każdym razem, gdy otwieram go na OS X 10.9.3
- 14. Pulsuj szablon za każdym razem, gdy jest renderowany w Meteoru
- 15. JSON.stringify ucieka podwójne cytaty za każdym razem, gdy stringified
- 16. Usuwanie plików, który ma ten sam przedrostek
- 17. FullGC dzieje się za każdym razem, gdy działa CMS
- 18. Po ustawieniu trybu eruby-nxhtml-mumamo za każdym razem, gdy otwierasz plik .html.erb
- 19. Kod modułu ES6 wykonywany za każdym razem, gdy jest importowany
- 20. Przeciek pamięci za każdym razem, gdy wydano UIScrollView.
- 21. glVertexAttribPointer potrzebny za każdym razem, gdy wywoływany jest glBindBuffer?
- 22. Powracaj różne wartości za każdym razem, gdy oczekiwane jest jMockit
- 23. Niewłaściwe widoki za każdym razem, gdy otwieram scenorys
- 24. Statechange jest uruchamiane za każdym razem, gdy robię stan push
- 25. Zobacz kontroler pochodzenie zmienia się za każdym razem, gdy przedstawił
- 26. Dlaczego adresy zmiennych lokalnych mogą być różne za każdym razem?
- 27. Kompiluj ten sam plik z różnymi flagami za pomocą CMAKE
- 28. Dlaczego ta funkcja zwraca za każdym razem inną wartość?
- 29. uruchom `nvm use` automatycznie za każdym razem, gdy znajduje się plik .nvmrc w katalogu
- 30. x-ua za każdym razem nie działa
Aby odpowiedzieć na inne pytanie, nie, w bajtodzie nie ma znaczników czasowych. Ale plik zip oczywiście ma znaczniki czasu. Jeśli chcesz odtwarzać kompilacje Java, powinieneś sprawdzić Bazel. – Antimony