Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why project Jigsaw / JPMS?

Java's package management system always seemed simple and effective to me. It is heavily used by the JDK itself. We have been using it to mimic the concept of namespaces and modules.

What is Project Jigsaw (aka Java Platform Module System) trying to fill in?

From the official site:

The goal of this Project is to design and implement a standard module system for the Java SE Platform, and to apply that system to the Platform itself and to the JDK.

like image 818
John Avatar asked Aug 07 '12 11:08

John


People also ask

Why JPMS?

The main intent of developing JPMS is to make the JRE more modular i.e. have smaller jars which are optional and/or we can download/upgrade only the functionality as per need. JPMS/Project Jigsaw is going to address few major problems: ClassPath/JAR Hell. Massive Monolithic JDK.

What is Project Jigsaw?

Project Jigsaw is an umbrella project with the new features aimed at two aspects: the introduction of module system in the Java language. and its implementation in JDK source and Java runtime.

Which of the following is an advantage of the Java platform module system?

Advantages of Module: The main change in Java 9 is that it is now a module system with a modular JDK, modular source code, and modular run-time images. Internal APIs are hidden in a module. A module system creates more opportunities for the development of projects that can be dealing with distributed data processing.

What is module in Java with example?

A Java module is a packaging mechanism that enables you to package a Java application or Java API as a separate Java module. A Java module is packaged as a modular JAR file. A Java module can specify which of the Java packages it contains that should be visible to other Java modules which uses this module.


2 Answers

Jigsaw and OSGi are trying to solve the same problem: how to allow coarser-grained modules to interact while shielding their internals.

In Jigsaw's case, the coarser-grained modules include Java classes, packages, and their dependencies.

Here's an example: Spring and Hibernate. Both have a dependency on a 3rd party JAR CGLIB, but they use different, incompatible versions of that JAR. What can you do if you rely on the standard JDK? Including the version that Spring wants breaks Hibernate and visa versa.

But, if you have a higher-level model like Jigsaw you can easily manage different versions of a JAR in different modules. Think of them as higher-level packages.

If you build Spring from the GitHub source you'll see it, too. They've redone the framework so it consists of several modules: core, persistence, etc. You can pick and choose the minimal set of module dependencies that your application needs and ignore the rest. It used to be a single Spring JAR, with all the .class files in it.

Update: Five years later - Jigsaw might still have some issues to resolve.

like image 109
duffymo Avatar answered Sep 28 '22 02:09

duffymo


AFAIK The plan is to make the JRE more modular. I.e. have smaller jars which are optional and/or you can download/upgrade only the functionality you need.

Its to make it less bloated and give you the option of dropping legacy modules which perhaps most people don't use.

like image 40
Peter Lawrey Avatar answered Sep 28 '22 03:09

Peter Lawrey