1
2
将评论中的讨论记录下来,作为后人的回答:
这里的问题不是maven shade插件,它不修改(甚至不关心)包的大小写。这里的问题是底层的[windows]文件系统不区分大小写,并且不区分
除非您愿意更改包名称,否则maven shade插件中没有解决方法。你必须使用区分大小写的文件系统。一旦有吸引力的选择将是使用 Windows Subsystem for Linux ,它提供了自己的区分大小写的文件系统(ext4,iirc)。 还有一种方法可以使ntfs文件系统区分大小写(例如, this SU thread ),但我自己从来没有这样做过,也不能根据个人经验推荐。 |
2
1
虽然maven shade实际上似乎删除了大写的com目录,但实际上它将其与小写的目录合并。 这个区别看起来很小,但是允许我们使用maven shade的一个特殊部分来解决这个问题,即重新定位特性。 使用此功能,我们可以重新定位 奇怪的 将命名为大写的库转换为小写,而不需要更改这些库的源代码。
最终的阴影配置将如下所示:
|
3
0
我找到了解决上述问题的办法。尽管最佳实践,正如ferrybig和mureinik在他们的答案中所建议的,是对项目强制使用小写的包名称标准,但是由于在我的例子中这是不可能的,所以我遵循了以下方法。 简而言之: 在windows上,shade插件正在合并 组件对象模型 文件夹 通用域名格式 ,因为Windows将它们视为不区分大小写,所以如果 通用域名格式 已经创建,它将添加 组件对象模型 而不是创造一个新的。 解决方案: 在我的shade插件中,我创建了两个uber jar——一个包含大写的com包,另一个包含所有其他依赖项。这解决了问题,因为 通用域名格式 在第一个罐子里 组件对象模型 是的。 我使用的配置来自 this post. 基本上在第一个执行块中,我包含了包含COM包的工件,并从第二个执行块中排除了相同的工件: 执行块1:
执行块2:
注: 同样,第一个选择应该是在包中实施命名标准。但如果你想快速解决问题,你可以试试这个。 |
ammanbesaw · 由于未知原因调用API时收到错误 2 年前 |
Armin Orlik · Maven发布执行文件注入 2 年前 |
M. Winnicki · GWT和继承模块 2 年前 |
nijeg52273 · RCP Oomph安装程序创建指南 2 年前 |