在构建项目时,maven下载了1.8.2和2.4.3版本的spark-avro依赖项,并且打包了错误的依赖项。
在我的pom.xml文件中,我只有spark-avro版本2.4.3,1.8.2是其他地方的可传递依赖项。
如何指定要放入uber jar的具体版本?我尝试这样做:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-assembly</finalName>
<relocations>
<relocation>
<pattern>org.apache.http</pattern>
<shadedPattern>org.shaded.apache.http</shadedPattern>
</relocation>
</relocations>
<filters>
<filter>
<artifact>com.alcon.salesforce.etl:alcon-salesforce-etl</artifact>
<excludes>
<exclude>com/alcon/etl/glue/common/**</exclude>
</excludes>
</filter>
</filters>
<artifactSet>
<includes>
this ---------------------> <include>org.apache.avro:spark-avro_2.11:2.4.3</include>
<include>com.alcon.etl.common:*</include>
</includes>
</artifactSet>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>assembly</shadedClassifierName>
</configuration>
</execution>
</executions>
</plugin>
如您在顶部看到的那样,我在此处编写了spark-avro的特定版本,org.apache.avro:spark-avro_2.11:2.4.3
,但我搞砸了某个地方,因为当我提取生成的jar的内容时,没有火花在那里。
正确的语法是什么?
答案 0 :(得分:0)
您在看错地方。 Maven首先将依赖关系合并到一个列表中(每个工件仅在一个版本中出现)。您的<include>
只是此列表上的过滤器。
因此,Maven在中介传递性依赖项时可能没有选择您期望的依赖项。但是我不能肯定地说,因为我没有你的dependency:tree
。