Shadow Plugin Gradle: What does mergeServiceFiles() do?

烈酒焚心 提交于 2019-12-04 17:51:34

问题


In my build.gradle file I need to add the line:

shadowJar {
    mergeServiceFiles()
}

Otherwise the jar does not run properly. I wonder what this line does exactly? I use the Gradle plugin in Eclipse Luna. I create the jar on one Java project which depends on another one.


回答1:


mergeServiceFiles is declared exactly here and its implementation is as follows:

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

As you can see it uses ServiceFileTransfomer which is defined here. From its docs:

Modified from org.apache.maven.plugins.shade.resource.ServiceResourceTransformer.java

Resources transformer that appends entries in META-INF/services resources into a single resource. For example, if there are several META-INF/services/org.apache.maven.project.ProjectBuilder resources spread across many JARs the individual entries will all be concatenated into a single META-INF/services/org.apache.maven.project.ProjectBuilder resource packaged into the resultant JAR produced by the shading process.



来源:https://stackoverflow.com/questions/32887966/shadow-plugin-gradle-what-does-mergeservicefiles-do

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!