As you might have seen in the release notes, OpenRefine 3.9 contains quite a few changes related to extension compatibility. None of those should be breaking changes as far as I know, meaning that extensions built for 3.8 should continue to work for 3.9, but still, there are a few things worth knowing about this update.
Pinging @Sunil_Natraj @AtesComp @Sebastian as extension developers active on the forum.
In short
Just imitate this PR on the FilesExtension to upgrade to 3.9
Long version
The main change you need to be aware of is that 3.9 splits the Java classes that make up OpenRefine in more granular Maven artifacts. Many classes that used to be contained in the org.openrefine:main
have been moved to two new artifacts:
org.openrefine:core
, which contains the classes that define what OpenRefine's model is (what is a project, changes, operations, expression languages)org.openrefine:grel
, which contains the implementation of GREL
The org.openrefine:main
contains the implementation of those interfaces (each operation, each command, and so on) and depends on both core
and grel
. The motivation behind this modularization is to separate the interfaces from their implementation and avoiding unintentional couplings between various components that used to live in one big artifact (main
). Those changes were done while keeping all package and class names untouched.
If you use Maven to build your extension, you probably added a dependency to org.openrefine:main
, so that your extension is able to refer to OpenRefine classes. As you upgrade to 3.9, we encourage you to change this dependency to org.openrefine:core
instead (and optionally org.openrefine:grel
if you define new GREL functions or controls). This will pull in less classes in your class path, and will help make sure that you are only relying on classes that are meant to stay stable.
Furthermore, if you also added a dependency to the test-jar
of org.openrefine:main
(for instance to be able to reuse some testing utilities like RefineTest
), then you will need to change that to be org.openrefine:core
as the reusable test utilities are there.