Как я могу скомпилировать плагин для разных версий с Maven? - PullRequest
0 голосов
/ 16 марта 2020

Я пишу плагин источника данных для 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 сред выполнения, но это наиболее похожая вещь, которую я знаю в моей проблеме.

...