Here’s why you shouldn’t use Apache Derby: its developers and maintainers follow some really borked ideals and don’t truly care about open-source software.
Derby may or may not be a good database – I can’t really tell (and I don’t care either). What p*** me off is the developers’ disregard for the open-source community.
Let me tell you a short story giving reasons why not to use Apache Derby.
Recently I had to take over a dated software component which relied on embedded Derby databases for testing. The software hadn’t been touched in years and it was my job to bring it up-to-date. As soon as I started updating dependencies some tests failed with rather cryptic error messages from Derby. It was quite clear that the problem wasn’t with Derby but with one of the updated dependencies. However, in order to figure out what the root cause is I wanted to check the Derby code that eventually threw the exception. “Piece of cake” I thought, after all Derby is open-source, right? Read on.
First, I noted that Maven hadn’t downloaded the Derby source artifact – so I thought. Turns out there is none in Maven Central. Not nice.
Then I noted that the Derby stacktrace didn’t contain line numbers. Not nice either.
A quick Internet search revealed that both are intentional, deliberate omissions by the Derby team.
In a post to the Derby developer mailing list in 2012 a developer brought up those issues because he noted that several JIRA issues had been submitted requesting exactly that (DERBY-5668, DERBY-5543, DERBY-3910). The answer was a lengthy list of sad excuses why it should stay that way or why changes were too complicated. The OP tried one more time stating (highlight is mine):
…I prefer that we produce the artifacts our users need rather than focus too much on keeping the number down to a minimum. If the resulting process is too hard on the community, and more specifically the release manager, we have to simplify it with better scripting/tooling to make it bearable.
There was no more reply and that was it. Nothing changed.
Seriously, if you want your product/library to be adopted widely by “the community” you should listen to your users. In the last 8 or so years working with Maven I haven’t come across a single component in Maven Central that doesn’t have a source artifact or line numbers in compiled code. And you know what..if your release process is too difficult (i.e. more than one-click) or too time consuming you should consider that “if it hurts, do it more often”.
That’s why you shouldn’t use Apache Derby.