如何将jar转换为rsyncable jar?

Mar*_*cka 14 java deployment rsync gradle

我有一个由Gradle Shadow插件生成的胖/超级JAR .我经常需要通过网络发送胖JAR,因此,方便我只发送文件的delta而不是cca 40 MB的数据.rsync是一个很好的工具.但是,我的源代码中的一个小变化导致最终的胖JAR发生了很大的变化,因此rsync没有尽可能多的帮助.

我可以将胖JAR转换为rsync友好的JAR吗?

我对解决方案/解决方法的想法:

  • 把重量放在rsync上并告诉它它与压缩文件一起工作(我没有找到任何办法).
  • 将非rsyncable jar转换为rsyncable jar
  • 告诉Gradle Shadow生成rsyncable jar(目前不可能)

可能相关的问题:

Mar*_*cka 1

我在build.gradle中替换了原来的配置代码:

shadowJar {
    zip64 true
    entryCompression = org.gradle.api.tasks.bundling.ZipEntryCompression.STORED
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
    manifest {
        attributes 'Main-Class': 'com.my.project.Main'
    }
}
Run Code Online (Sandbox Code Playgroud)

jar {
    manifest {
        attributes(
                'Main-Class': 'com.my.project.Main',
        )
    }
}

task fatJar(type: Jar) {
    manifest.from jar.manifest
    classifier = 'all'
    from {
        configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
    } {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
    with jar
}
Run Code Online (Sandbox Code Playgroud)

(使用此处发布的解决方案/sf/answers/2199848941/

最终的 fatJar(即 56 MB)比 Shadow 插件为我生成的(即 35 MB)大得多。然而,最终的 jar 似乎是可 rsyncable 的(当我对源代码进行微小更改时,rsync 仅传输非常少量的数据)。

请注意,我对 Gradle 的了解非常有限,因此这只是我的观察,也许可以进一步改进。