Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Maven:在第三方依赖项中使用阴影版本_Maven_Maven Shade Plugin - Fatal编程技术网

Maven:在第三方依赖项中使用阴影版本

Maven:在第三方依赖项中使用阴影版本,maven,maven-shade-plugin,Maven,Maven Shade Plugin,假设我的项目叫做A,Foo和Bar是第三方库。A取决于Foo版本1和Bar。Bar取决于Foo版本2: A -> Foo version 1 \-> Bar \-> Foo version 2 在我的项目的,A的,POM中使用这个Maven shade插件配置 <relocation> <pattern>Foo</pattern> <shadedPattern>FooA</shadedPat

假设我的项目叫做A,Foo和Bar是第三方库。A取决于Foo版本1和Bar。Bar取决于Foo版本2:

A -> Foo version 1  
  \-> Bar  
      \-> Foo version 2
在我的项目的,A的,POM中使用这个Maven shade插件配置

<relocation>
  <pattern>Foo</pattern>
  <shadedPattern>FooA</shadedPattern>
</relocation>

福
福阿
我使用的版本Foo version 1将被重命名/重新定位为FooA


问题:是否可以改名/重新定位Foo版本2?我知道,如果我能修改酒吧的POM,这是可以做到的——但是,我不能,因为我不是酒吧的经销商

Maven不允许依赖同一工件的多个版本。依赖项解析的工作方式如下:

Maven选择了“最接近的定义”。也就是说,它使用依赖关系树中与项目最接近的依赖关系的版本。您总是可以通过在项目的POM中显式声明来保证版本。请注意,如果两个依赖项版本在依赖项树中的深度相同,则第一个声明获胜

“最近的定义”意味着所使用的版本将是依赖关系树中最接近您的项目的版本。例如,如果A、B和C的依赖项定义为A->B->C->D2.0和A->E->D1.0,则在构建A时将使用D1.0,因为从A到D到E的路径较短。您可以在中显式地向D2.0添加依赖项,以强制使用D2.0

资料来源:

正如在解决方案中建议的那样,可以在每个模块中生成具有此类冲突的着色JAR。以你为例,这将是

  • 创建一个模块“Bar shaded”,该模块创建一个包含“Bar”及其所有依赖项的着色JAR
  • 在模块“A”中,将依赖项添加到“Foo”版本1和“条形图着色”

可能与@RolandWeisleder重复-感谢链接-尽管我还无法找出如何将该问题的答案应用于我的问题-另一个问题似乎相关,但更一般。你能帮忙吗?啊…通过
模块“Bar shade”
你的意思是我需要创建另一个Maven项目/工件(带有shade插件),作为第三方Bar工件的包装器?@flow2k确切地说,如果shade插件有一个选项可以自动为我做这件事,那就太好了,因此,我不必创建所有这些着色包装器项目(如果有多个)。但我想这个功能还不存在。。。