如何使用shadowJar gradle插件而不是maven发布将胖JAR发布到JitPack

Posted

技术标签:

【中文标题】如何使用shadowJar gradle插件而不是maven发布将胖JAR发布到JitPack【英文标题】:How to publish a fat JAR to JitPack using shadowJar gradle plugin and not maven publish 【发布时间】:2018-09-16 20:18:29 【问题描述】:

如何将胖 JAR 发布到 JitPack 并不是很直观,因为影子文档没有关于 JitPack 的部分,而 JitPack 文档没有关于胖 jar 的部分。

所有文档都说,如果您包含maven-publish,那么他们将执行任务publishToMavenLocal

通常通过gradle shadowjar 创建一个shadowJar fat jar,但是JitPack 上的构建命令是不可配置的,因此我们必须修改我们的publishToMavenLocal 以使用shadowJar。

【问题讨论】:

【参考方案1】:

我向 JitPack 提出了支持请求,他们返回了以下代码,我已测试该代码截至 2018 年 4 月 12 日可以正常工作:

plugins 
    id "com.github.johnrengelman.shadow" version "2.0.2"


apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'

group = 'com.github.jitpack-io'

repositories 
  mavenCentral()


dependencies 
  compile 'com.google.guava:guava:18.0'
  testCompile 'junit:junit:4.12'


task sourcesJar(type: Jar, dependsOn: classes) 
    classifier = 'sources'
    from sourceSets.main.allSource


task javadocJar(type: Jar, dependsOn: javadoc) 
    classifier = 'javadoc'
    from javadoc.destinationDir


shadowJar 
    archiveName = "$baseName-$version.$extension"


artifacts 
    archives sourcesJar
    archives javadocJar
    archives shadowJar

他们已经通过GitHub 发布了代码。

也可以和gradle wrapper结合使用:

allprojects 
    task wrapper(type: Wrapper) 
        gradleVersion = '4.4'
        distributionType = Wrapper.DistributionType.ALL
    

【讨论】:

【参考方案2】:

可能有点晚了,但我让它运行了,只是将工件添加到发布部分,如下所示:

publishing 
publications 
    mavenJava(MavenPublication) 
        groupId project.group
        artifactId project.name
        version project.version
        from components.java
        artifact sourceJar 
            classifier "sources"
        
        artifact shadowJar
    
....

【讨论】:

以上是关于如何使用shadowJar gradle插件而不是maven发布将胖JAR发布到JitPack的主要内容,如果未能解决你的问题,请参考以下文章

如何解决安装 warp10-ext-influxdb 插件时的 gradle shadowJar 问题?

无法在 Intellij 中为 Gradle 导入 ShadowJar 插件

如何为 Kotlin (Gradle) 构建导入 ShadowJar 插件?

Gradle 和 Shadow 插件 - 在 shadowJar 任务之后将附加文件(.jar 文件)复制到最终 jar

如何将清单部分与 Gradle 和 shadowJar 合并

无法为 gradle 任务设置类型 shadowJar