# VMF
**Repository Path**: mirrors_miho/VMF
## Basic Information
- **Project Name**: VMF
- **Description**: VMF is a Lightweight Modeling Framework for the Java Platform (works on JDK 11-24)
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-10-22
- **Last Updated**: 2026-07-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
VMF
=======
[](https://www.javadoc.io/doc/eu.mihosoft.vmf/vmf) [](https://www.javadoc.io/doc/eu.mihosoft.vmf/vmf-runtime) [](https://www.javadoc.io/doc/eu.mihosoft.vmf/vmf-jackson)

[](https://gitter.im/VMF_/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
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-24.
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
- jackson serialization support (json, xml, yml)
- json schema generation for validation and automatic visual editor generation
- ...
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](https://plugins.gradle.org/plugin/eu.mihosoft.vmf)):
```gradle
plugins {
id "eu.mihosoft.vmf" version "0.2.9.4" // 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:
```java
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](http://www.gradle.org/) Plugin (not necessary for command line usage)
### IDE
Open the `VMF` [Gradle](http://www.gradle.org/) project in your favourite IDE (tested with IntelliJ 2024) and build it
by executing the `publishToMavenLocal` task.
### Command Line
Navigate to the `VMF`[Gradle](http://www.gradle.org/) 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 executing `publishToMavenLocal`.
## 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`.