{"id":3978,"date":"2017-10-23T16:59:21","date_gmt":"2017-10-23T14:59:21","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3978"},"modified":"2017-10-23T16:59:21","modified_gmt":"2017-10-23T14:59:21","slug":"jmod-dateien-und-jar-dateien","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/10\/jmod-dateien-und-jar-dateien\/","title":{"rendered":"JMOD-Dateien und JAR-Dateien"},"content":{"rendered":"<p>Der Klassenlader bezieht .class-Dateien nicht nur aus Verzeichnissen, sondern in der Regel aus Containern. So m\u00fcssen keine Verzeichnisse ausgetauscht werden, sondern nur einzelne Dateien. Als Container-Formate finden wir JMOD (neu in Java 9) und JAR. Wenn Java-Software ausgeliefert wird bieten sich JAR- oder JMOD-Dateien an, denn es ist einfacher und platzsparender, nur ein komprimiertes Archiv weiterzugehen als einen gro\u00dfen Dateibaum.<\/p>\n<h3>JAR-Dateien<\/h3>\n<p>Sammlungen von Java-Klassendateien und Ressourcen werden in der Regel in Java-Archiven, kurz JAR-Dateien, zusammengefasst. Diese Dateien sind im Grunde ganz normale ZIP-Archive mit einem besonderen Verzeichnis META-INF f\u00fcr Metadateien. Das JDK bringt im bin-Verzeichnis das Werkzeug jar zum Aufbau und Extrahieren von JAR-Dateien mit.<\/p>\n<p>JAR-Dateien behandelt die Laufzeitumgebung wie Verzeichnisse von Klassendateien und Ressourcen. Zudem haben Java-Archive den Vorteil, dass sie signiert werden k\u00f6nnen und illegale \u00c4nderungen auffallen. JAR-Dateien k\u00f6nnen Modulinformationen beinhalten, dann hei\u00dfen sie engl. modular JAR.<\/p>\n<h3>JMOD-Dateien<\/h3>\n<p>Das Format JMOD ist speziell f\u00fcr Module und neu in Java 9 \u2013 es organisiert Typen und Ressourcen. Zum Auslesen und Packen gibt es im bin-Verzeichnis des JDK das Werkzeug jmod. <\/p>\n<h3>Hinweis<\/h3>\n<p>Die JVM greift selbst nicht auf diese Module zur\u00fcck. Achten wir auf die Ausgabe vom letzten Programmm, dann steht in der ersten Zeile:<\/p>\n<p>[0.015s][info][class,load] opened: <b>C:\\Program Files\\Java\\jdk-9\\lib\\modules<\/b><\/p>\n<p>Die Datei module ist ca. 170 MiB gro\u00df und in einem propriet\u00e4ren Dateiformat.<\/p>\n<h3>JAR vs. JMOD<\/h3>\n<p>Module k\u00f6nnen in JMOD- und JAR-Conatainer gepackt werden. Wenn ein JAR kein modular-JAR ist, also keine Modulinformationen enth\u00e4lt, so fehlen zentrale Informationen, wie Abh\u00e4ngigkeiten oder eine Version; ein JMOD ist immer ein benanntes Modul.<\/p>\n<p>JMOD-Dateien sind nicht so flexibel wie JAR-Dateien, denn sie k\u00f6nnen nur zur \u00dcbersetzungszeit und zum Linken eines Runtime-Images \u2013 daf\u00fcr gibt es das Kommandozeilenwerkzeug jlink \u2013 genutzt werden. JMOD-Dateien k\u00f6nnen nicht wie JAR-Dateien zur Laufzeit verwendet werden. Das Dateiformat ist propriet\u00e4r und kann sich jederzeit \u00e4ndern, es ist nichts Genaues spezifiziert.<a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/Band 1\/#_ftn1_5177\" name=\"_ftnref1_5177\">[1]<\/a> Einziger Vorteil von JMOD: Native Bibliotheken lassen sich standardisiert einbinden.<\/p>\n<hr size=\"1\" width=\"33%\" \/>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/Band 1\/#_ftnref1_5177\" name=\"_ftn1_5177\">[1]<\/a> Die http:\/\/openjdk.java.net\/jeps\/261 macht die Aussage, dass es ein ZIP ist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Klassenlader bezieht .class-Dateien nicht nur aus Verzeichnissen, sondern in der Regel aus Containern. So m\u00fcssen keine Verzeichnisse ausgetauscht werden, sondern nur einzelne Dateien. Als Container-Formate finden wir JMOD (neu in Java 9) und JAR. Wenn Java-Software ausgeliefert wird bieten sich JAR- oder JMOD-Dateien an, denn es ist einfacher und platzsparender, nur ein komprimiertes Archiv [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,85],"tags":[],"class_list":["post-3978","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-9"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3978"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3978\/revisions"}],"predecessor-version":[{"id":3979,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3978\/revisions\/3979"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}