Using the SoftwareComponent concept breaks when you are using your own configurations with Ivy as the configuration hierarchy is not reflected in the Ivy file. The default configuration seems to extend all other configurations and any custom hierarchys are discarded.
We had the same issue with the existing components (JavaComponent and WebComponent). We wanted to be able to model multiple configurations and have them all realized correctly in the ivy file. We got around by writing a CustomComponent that could handle more elaborate Usages. The docs aren’t the best, but we use it all the time: https://github.com/nebula-plugins/nebula-publishing-plugin
I think it´s easier if you just take a look at the snippet that causes the problem: org.gradle.api.publish.ivy.internal.publication.DefaultIvyPublication.from(SoftwareComponent)
The code iterates the configurations provided by the component but it does not mirror the extendsFrom attribute, it sets all the configurations to be extended by the default configuration.