Я пишу плагин источника данных для Spark, который имеет разные API в 2.X и 3.X. Я сделал решающий шаг для рефакторинга версии, специфицирующей c частей, и в итоге получил дерево вроде:
src/
main/
java/
app/
common/ # no dependency on spark
spark/ # code compatible with both 2.X and 3.X
adaptor_v24/ # 2.4 shim over classes in "common"
adaptor_v30/ # 3.0 shim over classes in "common"
и POM с профилем spark24 и spark30, чтобы выбрать подходящий Spark Deps & включите правильную adaptor_vXX
версию.
Теперь я хотел бы опубликовать sh две версии плагина для Maven Central, чтобы пользователи могли получить правильную версию своей установки Spark. (загрузка плагина 2.x в classpath spark3 и наоборот вызывает взрыв, поскольку соответствующих интерфейсов там нет). Я думаю, что правильный путь - это опубликовать sh с другим суффиксом artifactId, например, «app-spark2» / «app-spark3», но из того, что я видел, Maven действительно не хочет, чтобы вы изменяли artifactId динамически поэтому я делал sed против POM непосредственно перед тем, как опубликовать sh.
Это лучшее, что я могу сделать с Maven, или мне не хватает какой-либо функции / плагина, который позволил бы мне справиться с этим изначально? Я знаю, например, что sbt поддерживает что-то похожее на build / publi sh для нескольких Scala сред выполнения, но это наиболее похожая вещь, которую я знаю в моей проблеме.