Maven, eXist-db and EXPath

Adam Retter

adam@evolvedbinary.com
@adamretter

eXist-db Community Meetup
XML Prague 08/02/2018

Part 1.
Mavenizing eXist-db

Building eXist-db

  • Complicated build system

    • Apache Ant

    • Bespoke project layout

  • Modularizing eXist-db has failed

    • Difficult to define module boundaries

    • Hard to isolate test failures (to a module)

    • XQuery Extension modules have no location for tests

  • No real dependency management

    • Some dependencies in VCS / downloaded by Apache Ivy

    • Clean and Build without Internet connection is impossible

    • Some duplicate/conflicting dependencies, e.g. YAJSW, etc.

    • No alerts on dependency security issues, e.g. OWASP, etc.

Building eXist-db

  • IDE project files have to be maintained manually

  • Difficult to use eXist-db as an embedded database in a Java project

  • Generating a release is complicated

    • Several Manual Steps

    • Fixed Release Products (no pick-and-mix)

Benefits of switching to Maven

  • A modular eXist-db

    • Standard Project Layout

    • Each module has its own source code, tests, and resources

    • Modules can be built and tested (somewhat) independently

    • Different release products containing more or less modules

  • Dependency management

    • Downloaded on demand (and cached)

    • Conflicts can be detected and (automatically) resolved

    • Auto-checked for newer versions and/or Security alerts

  • Most IDEs natively support Maven Projects

  • Building and publishing can be a single command

Progress Report: Adopt Maven

  • Tool for Mavenizing eXist-db

    • https://github.com/adamretter/mavenize-exist

    • A set of Bash scripts and POM files

    • Input: a clone of the eXist repo

    • Output a Maven project

      • exist-parent module

      • exist-core module

  • Can run the eXist test suite using Surefire

  • Needs a further investment of time...

  • DEMO!

Part 2.
EXPath Packages and Maven

Creating EXPath Packages

  • Maven EXPath Pkg plugin

    • https://github.com/claudius108/kuberam-expath-plugin

  • Simplify: We provide a Maven archetype for users

    • https://github.com/eXist-db/exist-apps-archetype

    • Just generates a skeleton project:

      • Example XQuery Library Module written in Java

      • Example XQuery Library module written in XQuery

      • Build system for your project

      • Will create the EXPath Pkg Metadata for you

      • Ultimately builds an EXPath Pkg XAR file for you

  • Very easy for you to use!

  • DEMO!

Part 3.
Refelections on EXPath Pkg Spec

EXPath Pkg Spec :-/

  • Bad

    • Dependency management

    • Metadata descriptors

    • Auto Module registration

    • Interoperability

    • Extensibility

    • Publication/Distribution

  • Good

    • Documented conventions

    • Standard package file format

EXPath Pkg Spec :-/

  • Many wheels reinvented!

    • Make more use of Maven ecosystem

      • Maven is much more than `mvn` command

      • Maven ecosystem also used by Ivy, Gradle, SBT, Buildr, etc.

    • pom.xml files

      • Manage and reflect dependencies

      • Contain metadata needed for EXPath Package files

      • Maven Extension for .xar files (just like .nar files)

    • Distribute via Maven Central or other Maven ecosystem compatible repo.

  • We can do so much better through reuse!