LiteBeans is implementation of the java.beans
package based on the Apache Harmony project.
The java.desktop module introduced in JDK 9 encapsulates all AWT, Swing, Image and Sound packages from Java standard libraries.
In addition to that, it contains the java.beans
package with helper classes to interact with Java Beans, specifically bean introspection and property change listeners.
Due to its tight dependency with AWT and Swing, it cannot be easily removed from java.desktop
module, causing any thirdparty library that uses java.beans
package to be dependent of all java.desktop
classes.
The extra overhead of java.desktop
module adds 12mb
of size into the JVM installation and increases memory usage.
Implemented java.beans
package with only java.base
module dependency based on Apache Harmony project source code.
The implementation is a subset of official JDK java.beans
classes, it does not implement the full interface.
However, it adds enough classes to be used by Object Mapping (xml, json) libraries and Dependency Injection (Spring, CDI) frameworks in a transparent way.
The total size of LiteBeans library is less than 150kb
.
- Add Maven Dependency
<dependency>
<groupId>com.github.panga</groupId>
<artifactId>lite-beans</artifactId>
<version>1.0.0</version>
</dependency>
- Find all ocurrencies of
import java.beans
and replace withimport lite.beans
.
- Add Maven Dependency or download the JAR (notice the classifier)
<dependency>
<groupId>com.github.panga</groupId>
<artifactId>lite-beans</artifactId>
<version>1.0.0</version>
<classifier>patch</classifier>
</dependency>
- Run your application in a minimal JRE without
java.desktop
module:
java \
--patch-module java.base=lite-beans-1.0.0-patch.jar \
--add-exports java.base/java.beans=acme.myapp \
--module-path target/modules --module acme.myapp \
Note: See usage in https://github.com/panga/hammock-jpms example.
- Leonardo Zanivan panga@apache.org