VMF
VMF copied to clipboard
VMF is a Lightweight Modeling Framework for the Java Platform (works on JDK 11-22)
VMF
VMF is a lightweight modeling framework. It conveniently translates annotated Java interfaces into powerful implementations. It writes all the inevitable but boring boilerplate code for you and provides a modern and stable API. It is designed to work with the newest versions of Java as soon as they are released. It works well with Java 11-19. It generates/supports:
- getters and setters
- default values
- containment
- builder API
- equals() and hashCode()
- deep and shallow cloning
- change notification
- undo/redo
- object graph traversal API via iterators and streams
- immutable types and read-only wrappers
- delegation
- annotations
- reflection
- ...
A VMF model consists of annotated Java interfaces. We could call this "wannabe" code. Just specify the interface and its properties and get a fully functional implementation including property setters and getters, builders, iterators, and much more. Even for a simple model VMF provides a lot of useful APIs:
Using VMF
Checkout the tutorial projects: https://github.com/miho/VMF-Tutorials
VMF comes with excellent Gradle support. Just add the plugin like so (get the latest version here):
plugins {
id "eu.mihosoft.vmf" version "0.2.8.7" // use latest version
}
Now just add the model definitions to the VMF source folder, e.g., src/main/vmf/
. The package name must end with .vmfmodel
, for example:
package eu.mihosoft.vmf.tutorial.vmfmodel;
import eu.mihosoft.vmf.core.Container;
import eu.mihosoft.vmf.core.Contains;
interface Parent {
@Contains(opposite = "parent")
Child[] getChildren();
String getName();
}
interface Child {
@Container(opposite="children")
Parent getParent();
int getValue();
}
Just call the vmfGenModelSources
task to generate the implementation.
To improve IDE support, enable the IntelliJ support via
buildscript {
ext.vmfPluginIntelliJIntegration = true
}
Building VMF (Core, Runtime and Plugin)
Requirements
- Java >= 11
- Internet connection (dependencies are downloaded automatically)
- IDE: Gradle Plugin (not necessary for command line usage)
IDE
Open the VMF
Gradle project in your favourite IDE (tested with IntelliJ 2023) and build it
by executing the publishToMavenLocal
task.
Command Line
Navigate to the VMF
Gradle project (i.e., path/to/VMF/
) and enter the following command
Bash (Linux/macOS/Cygwin/other Unix shell)
bash gradlew publishToMavenLocal
Windows (CMD)
gradlew publishToMavenLocal
NOTE: to execute the tests within the VMF project (basic tests) execute the
test
task after executingpublishToMavenLocal
.
Testing VMF (Core, Runtime & Plugin)
To execute the full test suite, navigate to the test project (i.e., path/to/VMF/test-suite
) and enter the following command
Bash (Linux/macOS/Cygwin/other Unix shell)
bash gradlew test
Windows (CMD)
gradlew test
This will use the latest snapshot vmf and gradle-plugin to execute the tests defined in the test-suite project.
Viewing the Report
An HTML version of the test report is located in the build folder test-suite/build/reports/tests/test/index.html
.