Shadow Plugin Gradle:mergeServiceFiles()有什么作用?

在我的build.gradle文件中,我需要添加以下行:

shadowJar { mergeServiceFiles() } 

否则jar子不能正常运行。 我想知道这条线到底是做什么的? 我在Eclipse Luna中使用Gradle插件。 我在一个Java项目上创建了jar,它依赖于另一个Java项目。

你为什么不自己在代码中调查呢? mergeServiceFiles正好在这里声明,其实现如下:

 /** * Syntactic sugar for merging service files in JARs * @return */ public ShadowJar mergeServiceFiles() { try { transform(ServiceFileTransformer.class); } catch (IllegalAccessException e) { } catch (InstantiationException e) { } return this; } 

如您所见,它使用此处定义的ServiceFileTransfomer 。 从它的文档:

从org.apache.maven.plugins.shade.resource.ServiceResourceTransformer.java修改

将META-INF /服务资源中的条目附加到单个资源中的资源转换器。 例如,如果有多个META-INF / services / org.apache.maven.project.ProjectBuilder资源分布在多个JAR中,则各个条目将连接成一个META-INF / services / org.apache.maven.project。 .ProjectBuilder资源打包到由着色过程生成的结果JAR中。