Chciałbym zmodyfikować plik w moim słoiku. Czy można to zrobić bez wyodrębniania i ponownego usuwania plików z poziomu mojej aplikacji?
Pliki, które chcę zmodyfikować, to pliki konfiguracyjne, głównie w formacie XML.
Powodem, dla którego interesuje mnie, aby nie usuwać zakłóceń, jest to, że aplikacja jest opakowana w launch4j, jeśli ją rozpakuję, nie mogę ponownie utworzyć pliku .exe.
Odpowiedzi:
Możesz użyć
u
opcji dlajar
Z samouczków Java:
„Wszystkie pliki znajdujące się już w archiwum i mające taką samą ścieżkę jak dodawany plik zostaną nadpisane”.
Zobacz Aktualizowanie pliku JAR .
O wiele lepsze niż ponowne zrobienie całego słoika. Wywołanie tego z poziomu programu również wydaje się możliwe. Spróbuj uruchomić wiersz poleceń w Javie
źródło
Możesz użyć Vima:
vim my.jar
Vim jest w stanie edytować skompresowane pliki tekstowe, pod warunkiem, że masz je
unzip
w swoim środowisku.źródło
zip
w swoim środowisku, aby móc zapisać zmiany. Dziękuję za odpowiedź!Pliki jar Java mają ten sam format, co pliki zip - więc jeśli masz narzędzie do plików zip, które pozwala modyfikować archiwum, masz nogę w drzwiach. Drugi problem polega na tym, że jeśli chcesz ponownie skompilować klasę lub coś w tym stylu, prawdopodobnie będziesz musiał po prostu ponownie zbudować jar; ale plik tekstowy czy coś (na przykład xml) powinno być łatwo modyfikowane.
źródło
Jak wiele osób powiedziało, nie można zmienić pliku w JAR bez ponownego jego przeanalizowania. Jeszcze gorzej jest z Launch4J, musisz odbudować EXE po zmianie JAR. Więc nie idź tą drogą.
Generalnie złym pomysłem jest umieszczanie plików konfiguracyjnych w JAR. Oto moja sugestia. Wyszukaj plik konfiguracyjny w niektórych z góry określonych lokalizacjach (takich jak katalog domowy, \ Program Files \ itp.). Jeśli znajdziesz plik konfiguracyjny, użyj go. W przeciwnym razie użyj tego w pliku JAR jako rezerwy. Jeśli to zrobisz, wystarczy zapisać plik konfiguracyjny we wcześniej ustalonej lokalizacji, a program go pobierze.
Inną zaletą tego podejścia jest to, że zmodyfikowany plik konfiguracyjny nie zostanie nadpisany po uaktualnieniu oprogramowania.
źródło
Nie jestem pewien, czy to pomoże, ale możesz edytować bez wyodrębniania:
Sprawdź post na blogu, aby uzyskać więcej informacji http://vinurip.blogspot.com/2015/04/how-to-edit-contents-of-jar-file-on-mac.html
źródło
Może to wymagać więcej pracy, niż zamierzasz zajmować się w krótkim okresie, ale podejrzewam, że w dłuższej perspektywie byłoby bardzo korzystne, gdybyś przyjrzał się użyciu Ant (lub Maven , a nawet Bazela ) zamiast ręcznie budować słoiki . W ten sposób możesz po prostu kliknąć plik mrówka (jeśli używasz Eclipse) i odbudować jar.
Alternatywnie, możesz chcieć w ogóle nie mieć tych plików konfiguracyjnych w pliku jar - jeśli spodziewasz się konieczności regularnej wymiany tych plików lub jeśli ma być dystrybuowany do wielu stron, plik konfiguracyjny nie powinien być częścią słoik w ogóle.
źródło
Aby rozwinąć to, co powiedział dfa, powodem jest to, że plik jar jest skonfigurowany jako plik zip. Jeśli chcesz zmodyfikować plik, musisz odczytać wszystkie wpisy, zmodyfikować ten, który chcesz zmienić, a następnie zapisać wpisy z powrotem do pliku jar. Musiałem to zrobić wcześniej i to był jedyny sposób, w jaki mogłem to zrobić.
EDYTOWAĆ
Zwróć uwagę, że jest to użycie wewnętrznych edytorów plików jar Java, które są strumieniami plików. Jestem pewien, że jest na to sposób, możesz wczytać cały słoik do pamięci, zmodyfikować wszystko, a następnie zapisać z powrotem do strumienia plików. Uważam, że to właśnie robią narzędzia takie jak 7-Zip i inne, ponieważ uważam, że ToC nagłówka zip musi być zdefiniowane w czasie pisania. Jednak mogę się mylić.
źródło
Tak, możesz, używając SQLite możesz czytać lub zapisywać w bazie danych z pliku jar, więc nie będziesz musiał go rozpakowywać, a następnie ponownie jarać, śledź mój post http://shoaibinamdar.in/blog/? p = 313
używając składni "jdbc: sqlite :: resource:" możesz czytać i zapisywać w bazie danych z poziomu pliku jar
źródło
Sprawdź TrueZip .
Robi dokładnie to, co chcesz (edytuje pliki bezpośrednio w pliku jar) za pośrednictwem interfejsu API wirtualnego systemu plików. Obsługuje również zagnieżdżone archiwa (jar wewnątrz słoika).
źródło
Wyodrębnij plik jar dla ex. z winrar i użyj CAVAJ:
Cavaj Java Decompiler to graficzne darmowe narzędzie, które rekonstruuje kod źródłowy Java z plików CLASS.
tutaj jest samouczek wideo, jeśli potrzebujesz: https://www.youtube.com/watch?v=ByLUeem7680
źródło
Dopóki ten plik nie jest .class, tj. Plikiem zasobów lub plikiem manifestu - możesz.
źródło
Najprostszym sposobem, w jaki udało mi się to zrobić w systemie Windows, jest WinRAR :
źródło
większość powyższych odpowiedzi mówi, że nie możesz tego zrobić dla pliku klasy.
Nawet jeśli chcesz zaktualizować plik klasy, możesz to również zrobić. Wszystko, co musisz zrobić, to przeciągnąć i upuścić plik klasy z obszaru roboczego do słoika.
Jeśli chcesz zweryfikować zmiany w pliku klasy, możesz to zrobić za pomocą dekompilatora, takiego jak jd-gui.
źródło