Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Maven为不同的上游版本编译插件?_Java_Maven_Apache Spark_Maven Central - Fatal编程技术网

Java 如何使用Maven为不同的上游版本编译插件?

Java 如何使用Maven为不同的上游版本编译插件?,java,maven,apache-spark,maven-central,Java,Maven,Apache Spark,Maven Central,我正在为Spark编写一个数据源插件,它在2.X和3.X中有不同的API。我冒险重构了特定于版本的部分,最终得到了一棵树,如: 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"

我正在为Spark编写一个数据源插件,它在2.X和3.X中有不同的API。我冒险重构了特定于版本的部分,最终得到了一棵树,如:

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"
以及具有spark24和spark30配置文件的POM,以选择合适的Spark deps,包括正确的
适配器\u vXX
版本

现在我想将插件的两个版本发布到Maven Central,这样用户就可以获得Spark安装的正确版本。(将2.x插件加载到spark3的类路径中,反之亦然,会导致崩溃,因为没有合适的接口)。我认为正确的方法是发布一个不同的artifactId后缀,比如“app-spark2”/“app-spark3”,但是从我所看到的,Maven真的不希望你动态地修改artifactId,所以我在发布之前就直接针对POM做了一个sed


这是我对Maven所能做的最好的了吗,还是我缺少了一些可以让我自己处理这个问题的特性/插件?我知道,例如,sbt支持类似于针对多个Scala运行时构建/发布的功能,但这是我所知道的与我的问题最相似的功能。

你是说像?@xerx593看起来我可以将不同的JAR上传到maven,但Spark无法加载它们,它将坐标解释为“1.0.1-SNAPSHOT-spark3”不是将组件拉出…等等,这是“部署端”,在使用/客户端/依赖端,您还将提供(基于概要文件/环境)
。。。“拉出组件”-我不确定还需要什么/程序集的详细信息,但分类器的一致使用会将“已分类的jar”(我假设jar来自默认依赖项。“type”(请参见上面的链接))带到(作用域)classpath抱歉,我的意思是拉出“分类器组件”-但无论如何,是的,这是在客户端,但用户不使用POM,他们给spark一个maven坐标,spark使用ivy解析器下载包(+DEP)。(参见spark.jars.packages at)。Spark不理解分类器,所以尝试使用多个分类器是行不通的