Java 替换可传递的依赖项构建maven fat jar
在创建胖罐子时,我试图用最新的依赖项替换可传递的依赖项。但是每次旧的依赖项包含在jar中时。我尝试了组装插件和着色插件。这是我的pom中的一个片段-Java 替换可传递的依赖项构建maven fat jar,java,maven,maven-assembly-plugin,maven-shade-plugin,Java,Maven,Maven Assembly Plugin,Maven Shade Plugin,在创建胖罐子时,我试图用最新的依赖项替换可传递的依赖项。但是每次旧的依赖项包含在jar中时。我尝试了组装插件和着色插件。这是我的pom中的一个片段- <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-10_2.11</artifactId> <version>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
<version>2.3.1</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.10.2.0</version>
</dependency>
org.apache.spark
spark-streaming-kafka-0-10_2.11
2.3.1
编译
org.apache.kafka
卡夫卡2.11
org.apache.kafka
卡夫卡2.11
0.10.2.0
着色插件片段-
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<artifactSet>
<excludes>
<exclude>org.apache.kafka:kafka-clients:*</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven阴影插件
3.0.0
org.apache.kafka:kafka客户端:*
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
包裹
阴凉处
任何帮助都将不胜感激。尝试重新排序依赖项 将依赖项与所需版本保持在依赖项之上,通过传递依赖项将其包含在依赖项中 做几次mvn dependency:tree,使其正确 例如:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.10.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
<version>2.3.1</version>
<scope>compile</scope>
<!-- <exclusions>
<exclusion>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
</exclusion>
</exclusions> -->
</dependency>
org.apache.kafka
卡夫卡2.11
0.10.2.0
org.apache.spark
spark-streaming-kafka-0-10_2.11
2.3.1
编译
参考:
1.https://stackoverflow.com/questions/31740785/why-order-of-maven-dependencies-matter
2.https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies
您是否尝试了
dependency:tree
命令以查看谁链接到了错误的版本?这是追踪这些东西最简单的方法。然后您可以排除
可传递依赖项。是的,我排除了!Spark-streaming-kafka-0-10_2.11添加了该依赖项,但即使从该依赖项中排除了可传递依赖项,可传递依赖项仍然会打包到胖罐子中。我已经展示了我是如何做的。请在你的问题中添加依赖项:树。
1. https://stackoverflow.com/questions/31740785/why-order-of-maven-dependencies-matter
2. https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies