Bundle Resources in a TeaVM/Flavour App
In a TeaVM single-page app, you may want to access files bundled with
the app. For CSS and images, you can include them in your app HTML
normally and let the browser fetch them. But in other cases you may
have a data file or configuration file you want bundled with the app
so you can read it from your code. This article shows how you can
include it like you would resources in a normal app, with one extra
step.
We will show how to add a properties file called
config.properties
to your TeaVM app.
Resource Placement
Place the config.properties
file in the
src/main/resources
folder, as usual.
List Resources to Include in a ResourceSupplier
ResourceSupplier is a TeaVM interface you need to implement to return
the names of resources to be bundled in your app. First, implement the
ResourceSupplier interface. Then place the fully-qualified name of
the class in a file called
resources/META-INF/services/org.teavm.classlib.ResourceSupplier
.
For our config.properties
file,
you would implement ResourceSupplier's supplyResources()
method as follows:
public String[] supplyResources(ResourceSupplierContext context) {
String[] result = { "config.properties" };
return result;
}
Reading the Resource
This is the easy part. Get the class loader, then get a resource as a
stream, like on a traditional JVM. You must use one of the files you
returned from the ResourceSupplier. Other files are not bundled into
the JS file built by TeaVM.
InputStream stream = MyClass.class.getClassLoader().getResourceAsStream("config.properties");
Last modified on 20 Feb 2024 by AO
Copyright © 2024 Andrew Oliver