Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reorganize the rdf4j-util module: split into separate modules for easier dependency mgmt #2710

Closed
abrokenjester opened this issue Dec 10, 2020 · 0 comments
Assignees
Labels
🔧 internal task a project workflow / setup task not directly impacting end users M1 Fixed in milestone 1
Milestone

Comments

@abrokenjester
Copy link
Contributor

abrokenjester commented Dec 10, 2020

The @Experimental and @InternalUseOnly annotations are currently part of rdf4j-model-api. They were moved there (from rdf4j-util) as part of an effort to make rdf4j-model-api as lightweight as possible (and not have to include all the iterator and utility classes from rdf4j-util).

This has introduced a problem in the dependency hierarchy, in particular for rdf4j-util: it now has to depend on rdf4j-model-api, just to be able to refer to those two annotation classes. Note that even if we removed their actual use from rdf4j-util code, we'd still get api comparison errors, because those two classes no longer appear (making it binary incompatible).

We could move them back and make rdf4j-model-api depend on rdf4j-util again, but that increases its footprint again.

A better fix is to reorganize the rdf4j-util module, splitting it into separate "commons utilities" modules. That way the annotation classes can be moved back into a (leaner) commons module that rdf4j-model-api can then depend on again.

Possible new Maven structure (oer = org.eclipse.rdf4j):

  • rdf4j-commons (POM only, contains submodules for various 'commons' functionality)
    • rdf4j-commons-utilities -> annotations and other classes (for which no more specific module can be found) for use throughout the rdf4j codebase. Intended to be as small as possible to decrease footprint.
    • rdf4j-commons-iterators -> everything in oer.common.iterator, oer.common.iteration and oer.util.iterators
    • rdf4j-commons-transaction -> everything in oer.common.transaction (at some point we'll migratate IsolationLevel there as well)
    • rdf4j-commons-io -> everything in oer.common.io and oer.common.net
    • rdf4j-commons-xml -> everything in oer.common.xml
    • rdf4j-commons-text -> everything in oer.common.text

Note that rdf4j-util would be removed. Effectively we get six additional modules, all relatively small. Downside is more modules to juggle, but possible upside is that it gives us more control when wanting to share functionality across the code base (especially when sharing code across both client and server). It also gives us a better handle on what code in that "catch-all" bucket is out of date and no longer used, and sets us up nicely for the goal of making sure each package is only in a single module.

@abrokenjester abrokenjester added 💬 needs discussion 🔧 internal task a project workflow / setup task not directly impacting end users labels Dec 10, 2020
@abrokenjester abrokenjester added this to the 4.0.0 milestone Jan 6, 2021
@abrokenjester abrokenjester self-assigned this Jul 24, 2021
abrokenjester added a commit that referenced this issue Jul 27, 2021
@abrokenjester abrokenjester added the M1 Fixed in milestone 1 label Nov 27, 2021
hmottestad added a commit that referenced this issue Dec 22, 2021
Signed-off-by: Håvard Ottestad <hmottestad@gmail.com>
hmottestad added a commit that referenced this issue Dec 22, 2021
…-references

GH-2710 remove references to old missing util modules
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🔧 internal task a project workflow / setup task not directly impacting end users M1 Fixed in milestone 1
Projects
None yet
Development

No branches or pull requests

1 participant