Terra Addon Loading¶
This page serves as an explanation of the addon loading process in Terra. None of the information on this page is strictly necessary for developing a Terra addon, so feel free to skim. However, knowing how the addon loading process works can be helpful.
The Terra addon loading process can be divided into 2 main steps:
1. Bootstrap Addon Loading¶
The only addons Terra itself is capable of loading are Bootstrap Addons. The bootstrap addon loader is an extremely
minimal addon loader; it checks the JAR Manifest of all discovered bootstrap addons (from the addons/bootstrap
directory) for the Terra-Bootstrap-Addon-Entry-Point
attribute, then attempts to load and instantiate the
BootstrapBaseAddon-implementing class specified in the attribute.
Bootstrap Addon Initialization¶
After all bootstrap addons are loaded, the #initialize
method is invoked on each. During initialization, bootstrap
addons load additional addons, but does not initialize them.
2. Addon Initialization¶
After the bootstrap addons have loaded their addons, the freshly loaded addons must be initialized.
Dependency Sorting¶
First, addons’ dependencies are inspected. If any dependencies are missing, any invalid versions are found, or any circular dependencies arise, loading fails.
Addons are then sorted into a directional acyclic graph based on their dependencies. The graph is used to determine the order in which addons are loaded, to ensure dependencies are loaded before dependents.
Initialization¶
After the order to load addons is determined, addons can finally be initialized.
Dependency Injection¶
Terra’s addon system makes use of a simple annotation-based dependency injection framework to reduce boilerplate. When addons are initialised, the Platform instance is injected to any valid, annotated fields.