eXist-db Community Meetup
XML Prague 08/02/2018
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.
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)
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
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!
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!
Bad
Dependency management
Metadata descriptors
Auto Module registration
Interoperability
Extensibility
Publication/Distribution
Good
Documented conventions
Standard package file format
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!