正如我在从命令行运行jar时在MessageBodyProviderNotFoundException中的回答中所提到的,有一个“服务文件”,即
org.glassfish.jersey.internal.spi.AutoDiscoverable,它包含在许多jar中。该文件的目的是允许Jersey(和其他第三方)罐子提供对这些罐子中包含的功能的一些自动注册。这包括的注册
JacksonFeature,用于注册处理(反序列化)的JSON提供程序。
创建胖(超级)罐子的问题是只能有一个文件(您不能有多个同名文件)。因此,对于胖罐中包含的所有罐,将仅包含一个服务文件。
对于Maven,我们将使用maven-shade-
plugin,该插件具有允许转换构建部分的转换器。阴影插件具有
ServicesResourceTransformer,可将服务文件的内容串联到一个服务文件中。用于Gradle的Shadow插件具有相同的功能。您可以通过调用配置来配置它
mergeServiceFiles()。我并没有真正使用Gradle,但在本期中也作了介绍,建议使用以下配置来处理服务文件转换和主类清单转换
shadowJar { mergeServiceFiles() manifest { attributes 'Main-Class': 'com.my.Application' }}所以我假设,使用上述配置,您还可以删除
jar { manifest { attributes 'Main-Class': "${mainClassName}" } }因为Shadow插件将负责构建清单。再说一次,我并没有真正使用Gradle,所以这只是一个假设。但是听起来不错。



