我们Project-Core
提供了基本功能。 Project-X
使用Project-Core。
Project-Core
内部是一个多模块项目。为了避免部署所有子模块,我们使用maven-shade-plugin
创建了一个胖罐(超级罐)。 Project-Core
也有外部依赖项,如Spring。结果是一个胖胖的45MB罐子。
现在Project-X
使用Project-Core
,它包含fat-jar的dependency-reduced-pom,它运行正常。
但是,这种方法有点不灵活:如果Project-X
想要排除或使用较新版本的依赖项,则无法实现。
或者,Project-Core
部署只有核心实现的slim-jar,但不包括所有外部依赖项 - 这可以通过shade-plugin
配置实现。但是,Project-X
需要明确包含所有外部依赖项。这很麻烦,因为他们需要知道依赖关系和正确的版本。
更好的方法:
slim-jar使用包含外部依赖关系的自定义POM进行部署。然后,Project-X
可以包含此自定义POM,并且仍然可以获取所有依赖项,而无需明确包含它们。它还提供了排除/升级依赖项的灵活性。
问题:如何创建仅保留外部依赖关系的slim-jar自定义POM?
尝试使用createDependencyReducedPom
和keepDependenciesWithProvidedScope
选项(https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html),但没有一个符合目的。