Jackrabbit allows child node definitions with the same name, e.g.:
[type] > nt:base
+ child (nt:file)
+ child (nt:folder)
In org.apache.jackrabbit.spi.commons.nodetype.NodeTypeDefDiff previous and new child node definitions are paired with each other based on their name in order to determine whether there are changes between them. But the order in which they are paired is unpredictable because internally stored in a plain HashSet. Because the HashSet internals have changed between Java 7 and Java 8 we now see exceptions due to incompatible node type changes because the child node definitions are no longer paired up during diffing like before.