maven多版本冲突解决

maven多版本冲突解决

以下将以fabric-sdk-java依赖jar包进行说明。例如将Project B集成到Project A上,Project B这部分的代码始终跑不过,不是跳出来找不到某个类就是在类中又找不到某个方法,但是去本地依赖jar包对应版本查看的时候又是有这个方法或者是类的。如果你仔细跟代码就会发现Project B依赖jar包版本并不是自身依赖的版本,而是跳转到了Project A所依赖的jar包版本去了。依赖相同版本不相同,所以有少部分的类或者方法是有出入的。而我所遇到的就是Project B所依赖fabric-sdk-java的jar包里面又依赖了其他的jar包,而依赖的这个jar包有些依赖的版本和Project A依赖的一些jar包产生冲突,具体解决办法看下面。

解决办法:

  • 使用exclusion将冲突的版本给剔除掉。

    • 这个大多只适用于一个project下进行操作。在两个版本都不影响工程的情况下剔除一个版本即可。
  • 使用maven-shaded-plugin进行全依赖打包。

    • 这种情况适用于不同的工程运用相同依赖的不同版本。比如:在project A中依赖了某个版本的netty-all.1.4.17.jar,而fabric依赖的是nettty-all.1.4.43.jar。这个时候两个版本都不能剔除,剔除了版本1.4.17则projectA跑不起来,剔除了1.4.43版本则fabric也会出问题,这个时候就需要对fabric进行重定向打包了,具体步骤如下。

    • 步骤1:在git全局搜索fabric-sdk-java,会跳出来hyperledger/fabric-sdk-java,具体依赖具体而定。

    • 步骤2:点击进去选取你想要的版本并将源码克隆下来。

    • 步骤3:在pom文件里面添加maven-shade-plugins相关代码,如下。

         <build>
           <plugins>
           	     <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-shade-plugin</artifactId>
                      <version>3.2.1</version>
                      <executions>
                          <execution>
                              <phase>package</phase>
                              <goals>
                                  <goal>shade</goal>
                              </goals>
                          </execution>
                      </executions>
                  </plugin>
           </plugins>
         </build>
      
    • 步骤4:打包(1. 如果是idea则在右侧maven工程下对应plugins会有一个shade:shade,点击即可打包。2.其他则在控制运行mvn clean package命令进行打包即可)。

    • 注意:如果对fabric-sdk-java进行依赖打包,运行项目还会报找不到某个类或者方法,那就对这个类或者方法相关的包进行重定向即可,相关参考代码如下。

       <build>
           <plugins>
           	     <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-shade-plugin</artifactId>
                      <version>3.2.1</version>
                      <executions>
                          <execution>
                              <phase>package</phase>
                              <goals>
                                  <goal>shade</goal>
                              </goals>
                          </execution>
                      </executions>
                      <configuration>
                          <filters>
                              <filter> //过滤掉一些重复的依赖
                                  <artifact>*:*</artifact>
                                  <excludes>
                                      <exclude>META-INF/*.SF</exclude> 
                                      <exclude>META-INF/*.DSA</exclude>
                                      <exclude>META-INF/*.RSA</exclude>
                                  </excludes>
                            </filter>
                          </filters>
                          <createDependencyReducedPom>true</createDependencyReducedPom>
                          <relocations>   
                              <relocation>
                              <pattern>org.bouncycastle</pattern> //将包名进行从定向
                              <shadedPattern>shaded.org.bouncycastle</shadedPattern>
                          </relocation>
                          <relocation>
                              <pattern>com.google.protobuf</pattern>
                              <shadedPattern>shaded.com.google.protobuf</shadedPattern>
                          </relocation>
                          <relocation>
                              <pattern>io.netty</pattern>
                              <shadedPattern>shaded.io.netty</shadedPattern>
                          </relocation>
                          </relocations>
                      </configuration>
                  </plugin>
           </plugins>
         </build>
      
    • 注意:将io.netty重定向过后,控制台可能会报在META-INF/native会报找不到shade_netty_tcnative_windows_x86_64.dll的库文件,对于这种情况直接进入依赖包对应的META-INF/native路径将.dll后缀的库文件修改为对应的库文件即可。比如netty_tcnative_windows_x86_64.dll改为shade_netty_tcnative_windows_x86_64.dll。没有则跳过。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值