{"id":7427,"date":"2020-05-22T12:58:00","date_gmt":"2020-05-22T12:58:00","guid":{"rendered":"https:\/\/www.intexsoft.com\/?post_type=blog&#038;p=7427"},"modified":"2022-07-19T12:06:23","modified_gmt":"2022-07-19T12:06:23","slug":"java-9-modules","status":"publish","type":"blog","link":"https:\/\/intexsoft.com\/blog\/java-9-modules\/","title":{"rendered":"Java 9 Modules"},"content":{"rendered":"<section  class=\"hero hero-blog \">\n\t<div class=\"content\">\n\t\t\t\t\t<div class=\"hero__overlay\"><\/div>\n\t\t\t\t<div class=\"hero__container\">\n\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/\">\n\t\t\t\t<div class=\"hero-blog-btn\">\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t\t<div class=\"hero-blog-date-author\"> May 22, 2020 \u2022 by \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tAndrew &amp;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tDora\n\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<h1 class=\"hero__title \">Java 9 Modules<\/h1>\n\t\t\t\t\t\t\t\t\t\t<div class=\"hero-blog-categories\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"hero-blog-category\" data-id=\"22\" data-parent=\"18\">\n\t\t\t\t\t\t\tJava\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"hero-blog-category\" data-id=\"18\" data-parent=\"0\">\n\t\t\t\t\t\t\tTech Staff\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"hero-blog-image\">\n\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<source type=\"image\/webp\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/uploads-webp\/2021\/08\/360\u0445510-Java-9-Modules-min.jpg.webp\" media=\"(max-width: 480px)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<source type=\"image\/webp\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/uploads-webp\/2021\/08\/768\u0445773-Java-9-Modules-min.jpg.webp\" media=\"(max-width: 992px)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<source type=\"image\/webp\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/uploads-webp\/2021\/08\/1920x437-Java-9-Modules-min.jpg.webp\">\n\t\t\t\t\t\t\t\t\t\t<source srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/360\u0445510-Java-9-Modules-min.jpg\" media=\"(max-width: 480px)\">\n\t\t\t\t\t<source srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/768\u0445773-Java-9-Modules-min.jpg\" media=\"(max-width: 992px)\">\n\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/1920x437-Java-9-Modules-min.jpg\" loading=\"lazy\" alt=\"image\">\n\t\t\t\t<\/picture>\n\t\t\t<\/div>\n\t\t\t<\/div>\n<\/section>\n\t\t\t\t\t\t\t\n\t\t\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\"><section id=\"\"\n\t\t\t\t\t class=\"custom-wysiwyg-editor wysiwyg-portfolio \">\n\t\t<div class=\"content\">\n\n\n\n\t\t\t\t\t\t\t\n\t\t\t\t<div class=\"custom-wysiwyg-editor__anchors\">\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<p><span style=\"color: #333333;\">The main innovation in Java 9 was the introduction of modules. There was a lot of talk about this feature, the release date was postponed several times to finish everything properly. Today we\u2019ll talk about the mechanism of modules, and what benefits Java 9 brought in general.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">To implement the modules in this version of Java, a whole new project was allocated &#8211; Project Jigsaw &#8211; which includes several JEPs and JSRs.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">For those who like the official documentation,<\/span>\u00a0<a href=\"https:\/\/openjdk.java.net\/projects\/jigsaw\/\">here<\/a>\u00a0<span style=\"color: #333333;\">you can learn more about each JEP.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">More about Project Jigsaw<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Project Jigsaw started back in 2005: first, JSR 277 was released, and then in 2008 the actual work on the project began. It was released only in 2017. So it took almost 10 years to finish the Java modules in a proper way. Which, in fact, emphasizes the full scale of work and changes that were made during the implementation of modules.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Project goals:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\">facilitate the development of large applications and libraries;<\/span><\/li>\n<li><span style=\"color: #333333;\">improve the security of Java SE in general, and JDK in particular;<\/span><\/li>\n<li><span style=\"color: #333333;\">improve application performance;<\/span><\/li>\n<li><span style=\"color: #333333;\">enable the Java SE and JDK to scale down for use in small devices in order not to consume too much memory;<\/span><\/li>\n<li><span style=\"color: #333333;\">JAR HELL<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Java 9 Updates<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Prior to the version 9,<\/span>\u00a0<a href=\"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/\">JDK and JRE were monolithic<\/a>. <span style=\"color: #333333;\">Their size grew with each release. Java 8 already occupied hundreds of Mb, and the developers had to \u201ccarry all this stuff\u201d each time in order to run Java applications. Only rt.jar alone takes about 60 Mb. Well, here we can also add a slow start and high memory consumption. So, Java 9 can help here.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\"><a href=\"https:\/\/openjdk.java.net\/projects\/jdk9\/\">JDK 9<\/a>\u00a0introduced the module system, namely, the JDK was divided into 73 modules. And each new version brings us a higher amount of these modules. In the 11 version, this number is close to 100. This separation allows developers to create the<\/span>\u00a0<a href=\"https:\/\/docs.oracle.com\/javase\/9\/tools\/jlink.htm#JSWOR-GUID-CECAC52B-CFEE-46CB-8166-F17A8E9280E9\" rel=\"nofollow\">Jlink<\/a>\u00a0<span style=\"color: #333333;\">tool to create custom JRE that will include only those modules the application really needs. Thus, a simple application and some custom JRE with a minimal (or a small) set of modules can eventually fit in 20 Mb, which is good news.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">You can check the list of modules<\/span>\u00a0<a href=\"https:\/\/cr.openjdk.java.net\/~mr\/jigsaw\/jdk9-module-summary.html\" rel=\"nofollow\">here<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">With Java 9, the JDK structure has changed: now it is identical to the JRE structure. If earlier the JDK included the JRE folder with bin and duplicate files, now everything looks as follows:<\/span><\/p>\n<p>&nbsp;<\/p>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7432\" src=\"\/app\/uploads\/2021\/08\/java8-x-java9.jpg\" alt=\"\" width=\"715\" height=\"475\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java8-x-java9.jpg 715w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java8-x-java9-300x199.jpg 300w\" sizes=\"(max-width: 715px) 100vw, 715px\" \/>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Modules<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">What is a module, actually? A module is a new level of packages and resources aggregation, or as developers say:\u00a0<q>a uniquely named, reusable group of related packages, as well as resources and a module descriptor.<\/q><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Modules are delivered in JAR files with packages and a module descriptor &#8211;\u00a0<u>module-info.java<\/u>. The\u00a0<u>module-info.java<\/u>\u00a0file contains: name, dependencies, public packages, consumed and offered services, reflection permissions.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Examples of module descriptor:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"blog-code\">module java.sql {\r\n    requires transitive java.logging;\r\n    requires transitive java.transaction.xa;\r\n    requires transitive java.xml;\r\n\r\n    exports java.sql;\r\n    exports javax.sql;\r\n\r\n    uses java.sql.Driver;\r\n}\r\n\r\n\r\nmodule jdk.javadoc {\r\n   requires java.xml;\r\n   \r\n   requires transitive java.compiler;\r\n   requires transitive jdk.compiler;\r\n   \r\n   exports jdk.javadoc.doclet;\r\n   \r\n   provides java.util.spi.ToolProvider with\r\n       jdk.javadoc.internal.tool.JavadocToolProvider;\r\n   \r\n   provides javax.tools.DocumentationTool with\r\n       jdk.javadoc.internal.api.JavadocTool;\r\n   \r\n   provides javax.tools.Tool with\r\n      jdk.javadoc.internal.api.JavadocTool;   \r\n}\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">First is the <em><strong>module<\/strong><\/em> keyword, followed by the name of the <em><strong>jdk.javadoc<\/strong><\/em> package, which depends on another <em><strong>java.xml<\/strong><\/em> package and is transitively dependent on other packages.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Let&#8217;s take a closer look at the keywords:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\"><b><em>requires<\/em><\/b>\u00a0specifies the modules the current module depends on;<\/span><\/li>\n<li><span style=\"color: #333333;\"> <b><em>requires transitive <\/em><\/b>specifies the transitive dependency: if the module <b>m1<\/b>\u00a0is transitively dependent on the module\u00a0<b>m2<\/b>, and we have some third module\u00a0<b>&gt;mX<\/b>, which depends on\u00a0<b>m1<\/b>, then the module\u00a0<b>mX will also have access to m2;<\/b><\/span><\/li>\n<li><span style=\"color: #333333;\"><b><em>requires static <\/em><\/b>specifies the compile-time-only dependencies;<\/span><\/li>\n<li><span style=\"color: #333333;\"><em><strong>exports<\/strong><\/em> specifies the packages of the module that should be accessible for other modules (not including &#8220;sub-packages&#8221;);<\/span><\/li>\n<li><span style=\"color: #333333;\"><em><strong>exports&#8230;to&#8230;<\/strong> <\/em>allows us to restrict the access: export <u>com.my.package.name<\/u>\u00a0to\u00a0<u>com.specific.package<\/u>; that is, we can open access to the package of our module only for some other(s) package(s) of another module;<\/span><\/li>\n<li><span style=\"color: #333333;\"><em><strong>uses<\/strong> <\/em>specifies the services used by the module:<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<pre class=\"blog-code\">uses java.sql.Driver;\r\n\r\n\r\n\r\n<\/pre>\n<p><span style=\"color: #333333;\">In this case, we specify the interface of the service used.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\"><em><strong>provides<\/strong><\/em> specifies the services provided by the module:<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<pre class=\"blog-code\">provides javax.tools.Tool with\r\n    jdk.javadoc.internal.api.JavadocTool;<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">First we put the interface &#8211; <em><strong>javax.tools.Tool<\/strong><\/em>, and after <strong><em>with<\/em><\/strong>\u00a0&#8211; the implementation.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">A little more about services<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Let&#8217;s say we have several modules connected which implement an abstract service &#8211; <em><strong>MyService<\/strong><\/em>. When assembling the application, we can decide what service implementation to use by dropping the desired service implementation modules to &#8211;\u00a0 &#8211;<i>module-path<\/i>:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"blog-code\">Iterable &lt;MyService&gt; services = \r\n        ServiceLoader.load(MyService.class);<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Thus, the returned\u00a0Iterator contains a list of implementations of the <em><strong>MyService<\/strong><\/em> interface. In fact, it will contain all the implementations found in the modules on <em>&#8211; &#8211; module-pass<\/em>.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Why services were introduced at all? They are needed to show how our code will be used. So it\u2019s all about a semantic role. Also, modularity is about encapsulation and security, as we can make the implementation<em><strong> private<\/strong><\/em>\u00a0and exclude the possibility of unauthorized reflection access.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">One more option of using services is a rather simple implementation of plugins. We can implement the plugin interface for our application and connect modules to work with them.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Let&#8217;s go back to declarations<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Before Java 9 it was possible to use reflection to access almost everything, and we could do whatever we want. But as already mentioned, version 9 allows us to protect our app from \u201cillegal\u201d reflection access.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">We can allow full reflection access to the module by declaring <em><strong>open:<\/strong><\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"blog-code\">open module my.module {\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Or, we can expose specific packages with <em><strong>opens<\/strong><\/em>:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"blog-code\">module my.module {\r\n    opens com.my.coolpackage;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">It is also possible to use <em><strong>opens&#8230;to<\/strong><\/em>, thus opening the specific packages to the specific module(s).<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Module Types<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Project Jigsaw classifies modules as follows:<\/span><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li><span style=\"color: #333333;\"><b>System Modules<\/b> &#8211; Java SE and JDK modules. You can find the complete list using the java <em>&#8211; &#8211; list-modules<\/em>\u00a0command.<\/span><\/li>\n<li><span style=\"color: #333333;\"><b>Application Modules<\/b> &#8211; the modules of our app written by us, and also the dependencies (from third-party libraries) that the application uses.<\/span><\/li>\n<li><span style=\"color: #333333;\"><b>Automatic Modules<\/b> &#8211; these are modules with open access created automatically by Java from JAR files. Let\u2019s say we want to run our application in a modular mode, but it uses some library. In this case, we put the JAR file on<em> &#8211; &#8211; module-path<\/em> and Java automatically creates a module with the name inherited from the name of the JAR file.<\/span><\/li>\n<li><span style=\"color: #333333;\"><b>Unnamed Module<\/b> &#8211; an unnamed module automatically generated from all JAR files loaded to <em>&#8211; &#8211; class-path<\/em>. This is a catch-all module for backward compatibility with previously written Java code.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Class-path vs module-path<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">With modules, a new concept appeared &#8211; module-path. In fact, this is the classpath we all know, but for modules.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Starting a modular application looks like this:<\/span><\/p>\n<p>&nbsp;<\/p>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7435\" src=\"\/app\/uploads\/2021\/08\/java-modules-paths.jpg\" alt=\"\" width=\"714\" height=\"485\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-paths.jpg 714w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-paths-300x204.jpg 300w\" sizes=\"(max-width: 714px) 100vw, 714px\" \/>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">In a \u201cclassic mode\u201d, we specify options and the full path to the main class. If we want to work with modules, we also specify <em>-m<\/em> or \u00a0<em>-module<\/em> parameter, which indicates that we will run modules. That is, we automatically put our application in a \u201cmodular mode\u201d. Then, we specify the module name and the path to the main class from the module.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Also, in addition to classic <em>-cp<\/em> and <em>&#8211; &#8211; class-path<\/em> parameters we used to working with, we add new <em>-p<\/em> and <em>&#8211; &#8211; module-path<\/em>\u00a0parameters, which indicate the paths to the modules used in the app.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">It often happens that developers do not switch to Java 9+ because they believe they will have to work with modules. Although in fact, we can run our applications without adding a parameter for modules and use only other new features of Java 9.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">JAR HELL<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">What is Jar Hell in a nutshell?<\/span><\/p>\n<p>&nbsp;<\/p>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7433\" src=\"\/app\/uploads\/2021\/08\/java-modules.jpg\" alt=\"\" width=\"1772\" height=\"1227\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules.jpg 1772w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-300x208.jpg 300w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-1024x709.jpg 1024w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-768x532.jpg 768w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-1536x1064.jpg 1536w\" sizes=\"(max-width: 1772px) 100vw, 1772px\" \/>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">For example, our application depends on Library\u00a0<b>X<\/b>\u00a0and Library\u00a0<b>Y<\/b>. Moreover, both of these libraries depend on Library\u00a0<b>Z<\/b>, but on different versions:\u00a0<b>X<\/b>\u00a0depends on\u00a0<b>version 1<\/b>, and\u00a0<b>Y<\/b>\u00a0depends on\u00a0<b>version 2<\/b>. It\u2019s okay if version 2 is backward compatible with version 1, we\u2019ll have no problem then. But if not, obviously, we\u2019ll have a versions conflict, which means the same library cannot be loaded into memory by the same class loader.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">How do developers get over such situations? There are standard methods that developers have been using since the very first Java, for example: exclude, or plugins for Maven, which rename the root packages of the library. Or sometimes developers are looking for different versions of Library X to find a compatible option.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">In fact, the very first Jigsaw prototypes supposed the module might have a version and allowed different versions to be downloaded by different ClassLoaders. Later that idea was removed. As a result, the \u201csilver bullet\u201d many of us were waiting for did not work out.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">But still, the developers secured us from such problems right out of the box. In Java 9, Split Packages are forbidden. These are the packages divided into several modules. That is, if we have the\u00a0<u>com.my.coolpackage<\/u>\u00a0package in one module, we cannot use it in another module within the same app. If we run the application with modules containing the same packages, we\u2019ll simply crash. This small improvement eliminates the possibility of unpredictable behavior connected with Split Packages downloading.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">In addition to the modules themselves, there is a Jigsaw Layers mechanism, which also helps to cope with the Jar Hell.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">A Jigsaw layer can be defined as some local module system. Here it is worth noting that the Split packages mentioned above are prohibited only within one Jigsaw layer. Modules with the same packages have a place to be, but they must belong to different layers.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">It looks like this:<\/span><\/p>\n<p>&nbsp;<\/p>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7434\" src=\"\/app\/uploads\/2021\/08\/java-modules-2.jpg\" alt=\"\" width=\"1772\" height=\"1227\" srcset=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-2.jpg 1772w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-2-300x208.jpg 300w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-2-1024x709.jpg 1024w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-2-768x532.jpg 768w, https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/java-modules-2-1536x1064.jpg 1536w\" sizes=\"(max-width: 1772px) 100vw, 1772px\" \/>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">When the application starts, a Boot layer is created, which includes platform modules loaded by Bootstrap, additional platform modules loaded by the Extension loader, and modules of our application loaded by the Application loader.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">We can create our own layers anytime and \u201cput\u201d modules of different versions there without any problems.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">Here is a detailed presentation by Nikita Lipsky to learn more about the subject:<\/span>\u00a0<a href=\"https:\/\/speakerdeck.com\/pjbooms\/escaping-the-jar-hell-with-jigsaw-layers\">Escaping The Jar Hell With Jigsaw Layers<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #000000;\">Conclusion<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">The modules from Java 9 open up new possibilities for us, while the support for libraries today is quite limited. Of course, people run Spring, Spring Boot, and so on. But most libraries have not switched to the full use of modules. Apparently, that\u2019s why all these changes were met rather skeptically by the tech community. Modules provide us with new opportunities, but the demand issue remains open.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #333333;\">And finally, here is a list of useful content to learn:<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/openjdk.java.net\/projects\/jigsaw\/\" rel=\"nofollow\">Project Jigsaw<\/a><\/p>\n<p><a href=\"https:\/\/cr.openjdk.java.net\/~mr\/jigsaw\/jdk9-module-summary.html\" rel=\"nofollow\">JDK Module Summary<\/a><\/p>\n<p><a href=\"https:\/\/www.oracle.com\/corporate\/features\/understanding-java-9-modules.html\" rel=\"nofollow\">Paul Deitel &#8211; Understanding Java 9 Modules<\/a><\/p>\n<p><a href=\"https:\/\/www.baeldung.com\/project-jigsaw-java-modularity\" rel=\"nofollow\">baeldung.com &#8211; Introduction to Project Jigsaw<\/a><\/p>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=rfOjch4p0Po\" rel=\"nofollow\">Alex Buckley &#8211; Modular Development with JDK 9<\/a><\/p>\n\n\t\t<\/div>\n\t<\/section>\n\n\n\n<section id=\"\" class=\"authors \">\n\t\t<div class=\"content\">\n\t\t\t<div class=\"authors-container\">\n\t\t\t\t\t\t\t\t\t<h3 class=\"authors-title\">Written by<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"authors-info\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-photo\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/07\/Andrew.jpg\" loading=\"lazy\" alt=\"image\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-info\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"author-fullname\"> Andrew<\/h4>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-position text-tn\"> Head of Dev Department<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-photo\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/07\/Darya.jpg\" loading=\"lazy\" alt=\"image\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-info\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h4 class=\"author-fullname\"> Dora<\/h4>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"author-position text-tn\"> Marketing Manager<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t<\/section>\n\n\n<div class=\"post__share-links\">\n\t\t<div class=\"post__share-container\">\n\t\t\t\t\t\t\t<a class=\"post__share-link\" href=\"https:\/\/www.facebook.com\/sharer.php?u=http:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog\/7427&amp;t=Java 9 Modules\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"post__share-link-img facebook-white\"><\/span>\n\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t<a class=\"post__share-link\" href=\"http:\/\/www.linkedin.com\/shareArticle?mini=true&amp;url=http:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog\/7427\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"post__share-link-img linkedin-white\"><\/span>\n\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><section class=\"favorite-posts\">\n\t\t\t<h3 class=\"favorite-posts-title\">FAVORITES OF THE MONTH<\/h3>\n\t\n\t\t\t<div class=\"favorite-posts-items\">\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"favorite-posts-item\" href=\"https:\/\/intexsoft.com\/blog\/ai-in-ecommerce-how-technology-is-changing-the-way-we-shop\/\">\n\t\t\t\t\t<div class=\"favorite-posts-item-date-author\">March 6, 2024\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<h4 class=\"favorite-posts-item-title\">AI in Ecommerce: How Technology is Changing the Way We Shop<\/h4>\n\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<a class=\"favorite-posts-item\" href=\"https:\/\/intexsoft.com\/blog\/top-7-ecommerce-platforms-for-your-business\/\">\n\t\t\t\t\t<div class=\"favorite-posts-item-date-author\">April 3, 2024\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<h4 class=\"favorite-posts-item-title\">Top 7 Ecommerce Platforms For Your Business<\/h4>\n\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t<\/section>\n\n<section class=\"contact-form-widget\">\n\t\t\t<h3 class=\"contact-form-widget-title\">Don&#039;t miss our updates<\/h3>\n\t\t\n\t\t\t\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f3988-o1\" lang=\"en-US\" dir=\"ltr\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/wp-json\/wp\/v2\/blog\/7427#wpcf7-f3988-o1\" method=\"post\" class=\"wpcf7-form init mailchimp-ext-0.5.72 wpcf7-acceptance-as-validation\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<div style=\"display: none;\">\n<input type=\"hidden\" name=\"_wpcf7\" value=\"3988\" \/>\n<input type=\"hidden\" name=\"_wpcf7_version\" value=\"5.9.6\" \/>\n<input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/>\n<input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f3988-o1\" \/>\n<input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/>\n<input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/div>\n<div class=\"custom-input_block\">\n    <label class=\"custom-placeholder\" for=\"email\"><\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"80\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email contacts__input\" id=\"email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Enter your email...\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n<\/div>\n<div class=\"contacts__form-checkbox\">\n<span class=\"wpcf7-form-control-wrap\" data-name=\"privace-policy\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"privace-policy\" value=\"1\" class=\"contacts__checkbox form__checkbox_color_grey\" id=\"privacy-cookie-policy\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\"><label for=\"privacy-cookie-policy\" class=\"contacts__checkbox-subtitle blog\">\n        I agree to <a target=\"_blank\" href=\"\/privacy-policy\/\">Privacy<\/a> and <a target=\"_blank\" href=\"\/cookie-policy\/\">Cookie Policy*<\/a>\n  <\/label><\/span><\/label><\/span><\/span><\/span>\n<\/div>\n<button class=\"btn btn_color_primary\">\n  Send\n  <svg class=\"form-arrow\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n    <circle class=\"form-arrow__circle\" opacity=\"0.1\" cx=\"8\" cy=\"8\" r=\"7.33333\" stroke=\"white\" stroke-width=\"1.33333\"\/>\n    <circle class=\"form-arrow__circle form-arrow__circle-two\" opacity=\"0.1\" cx=\"8\" cy=\"8\" r=\"7.33333\" stroke=\"white\" stroke-width=\"1.33333\"\/>\n    <path class=\"form-arrow__path\" d=\"M7.33301 10.6665L9.99967 7.99984L7.33301 5.33317\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"square\"\/>\n    <path class=\"form-arrow__successful\" d=\"M5.33301 8.66357L7.00228 10.3328L11.335 5.99951\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"square\"\/>\n  <\/svg>\n<\/button><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div><p style=\"display: none !important\"><span class=\"wpcf7-form-control-wrap referer-page\"><input type=\"hidden\" name=\"referer-page\" value=\"http:\/\/intexsoft.com\/blog\/java-9-modules\/\" data-value=\"http:\/\/intexsoft.com\/blog\/java-9-modules\/\" class=\"wpcf7-form-control wpcf7-text referer-page\" aria-invalid=\"false\"><\/span><\/p>\n<!-- Chimpmatic extension by Renzo Johnson -->\n<\/form>\n<\/div>\n\n\t<\/section>\n\n\t\t\t\t<\/div>\n<\/div>\n\n\n<section id=\"\" class=\"related-posts  \">\n\t\t<div class=\"content\">\n\t\t\t\t\t\t\t<h2 class=\"section-title\">Related posts<\/h2>\n\t\t\t\t\t\t<ul class=\"posts-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/10-java-frameworks-for-web-applications-what-to-use-in-2020\/\" class=\"our-blog__block-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-image\">\n\t\t\t\t\t\t\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/640x400-10-Java-Frameworks-for-Web-Applications_-What-to-Use-in-2020-min.jpg\" loading=\"lazy\" alt=\"image\" width=\"446\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t height=\"278\">\n\t\t\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-date\">June 9, 2020<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"our-blog__block-item-content-title\">10 Java Frameworks for Web Applications: What to Use in 2020<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-subtitle\"> <p>Any framework is one of the tools that help to develop software solutions faster and better. The basic principle of a framework is not having to reinvent the wheel.<\/p> <\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/8-best-popular-projects-on-java\/\" class=\"our-blog__block-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-image\">\n\t\t\t\t\t\t\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/640x400-8-Best-Popular-Projects-on-Java-min.jpg\" loading=\"lazy\" alt=\"image\" width=\"446\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t height=\"278\">\n\t\t\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-date\">June 9, 2020<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"our-blog__block-item-content-title\">8 Best Popular Projects on Java<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-subtitle\"> <p>Today, according to reliable publicly available sources, Java remains\u00a0one of the most popular\u00a0programming languages. Java developers are always in demand.<\/p> <\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/intexsoft.com\/blog\/tools-for-launching-and-developing-products-on-jvm\/\" class=\"our-blog__block-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-image\">\n\t\t\t\t\t\t\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/intexsoft.com\/app\/uploads\/2021\/08\/640x400-Tools-for-Launching-and-Developing-Products-on-JVM-min.jpg\" loading=\"lazy\" alt=\"image\" width=\"446\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t height=\"278\">\n\t\t\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-date\">October 21, 2019<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h3 class=\"our-blog__block-item-content-title\">Tools for Launching and Developing Products on JVM<\/h3>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"our-blog__block-item-content-subtitle\"> <p>It\u2019s no secret that Java is one of the most popular programming languages in the world right now. It was officially launched on May 23, 1995.<\/p> <\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/ul>\n\t\t<\/div>\n\t<\/section>\n","protected":false},"author":1,"template":"","blog_category":[22,18],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.9 (Yoast SEO v22.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java 9 Modules - IntexSoft<\/title>\n<meta name=\"description\" content=\"The main innovation in Java 9 was the introduction of modules. Let&#039;s discuss their mechanism, and what benefits Java 9 brought in general.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/intexsoft.com\/blog\/java-9-modules\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java 9 Modules\" \/>\n<meta property=\"og:description\" content=\"The main innovation in Java 9 was the introduction of modules. Let&#039;s discuss their mechanism, and what benefits Java 9 brought in general.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/intexsoft.com\/blog\/java-9-modules\/\" \/>\n<meta property=\"og:site_name\" content=\"IntexSoft\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-19T12:06:23+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java 9 Modules - IntexSoft","description":"The main innovation in Java 9 was the introduction of modules. Let's discuss their mechanism, and what benefits Java 9 brought in general.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/intexsoft.com\/blog\/java-9-modules\/","og_locale":"en_US","og_type":"article","og_title":"Java 9 Modules","og_description":"The main innovation in Java 9 was the introduction of modules. Let's discuss their mechanism, and what benefits Java 9 brought in general.","og_url":"https:\/\/intexsoft.com\/blog\/java-9-modules\/","og_site_name":"IntexSoft","article_modified_time":"2022-07-19T12:06:23+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/intexsoft.com\/blog\/java-9-modules\/","url":"https:\/\/intexsoft.com\/blog\/java-9-modules\/","name":"Java 9 Modules - IntexSoft","isPartOf":{"@id":"https:\/\/intexsoft.com\/#website"},"datePublished":"2020-05-22T12:58:00+00:00","dateModified":"2022-07-19T12:06:23+00:00","description":"The main innovation in Java 9 was the introduction of modules. Let's discuss their mechanism, and what benefits Java 9 brought in general.","breadcrumb":{"@id":"https:\/\/intexsoft.com\/blog\/java-9-modules\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/intexsoft.com\/blog\/java-9-modules\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/intexsoft.com\/blog\/java-9-modules\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/intexsoft.com\/"},{"@type":"ListItem","position":2,"name":"Java 9 Modules"}]},{"@type":"WebSite","@id":"https:\/\/intexsoft.com\/#website","url":"https:\/\/intexsoft.com\/","name":"IntexSoft","description":"...","publisher":{"@id":"https:\/\/intexsoft.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/intexsoft.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/intexsoft.com\/#organization","name":"IntexSoft","url":"https:\/\/intexsoft.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/intexsoft.com\/#\/schema\/logo\/image\/","url":"https:\/\/intexsoft.com\/app\/uploads\/2021\/05\/Logo.png","contentUrl":"https:\/\/intexsoft.com\/app\/uploads\/2021\/05\/Logo.png","width":156,"height":33,"caption":"IntexSoft"},"image":{"@id":"https:\/\/intexsoft.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog\/7427"}],"collection":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/media?parent=7427"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/intexsoft.com\/wp-json\/wp\/v2\/blog_category?post=7427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}