2

我使用影子 jar 插件 ( https://github.com/johnrengelman/shadow ) 创建一个额外的 jar 文件,其中包含我所有的依赖项。我还想保留只有我的代码和资源的默认生成的 jar。在发布 jar 之前,这非常简单明了。

由于我的影子 jar 里面有它的所有 deps,它的 pom 文件在发布方面对我来说不是优先事项。但是,如果我按照 shadowJar 插件文档中的说明进行操作(https://imperceptiblethoughts.com/shadow/publishing/#publishing-with-maven-publish-plugin

publishing {
  publications {
    shadow(MavenPublication) { publication ->
      project.shadow.component(publication)
    }
  }

我最终得到了两个不同的 pom 文件(一个用于常规 jar 文件,一个用于影子 jar)发布到同一个URL,其中一个覆盖另一个。此行为会导致客户下载默认 jar,但 pom 文件中没有任何依赖项。

我尝试了很多方法来禁用 shadowJar pom 文件,但没有任何成功。我如何让它工作?

4

1 回答 1

0

最终,我只是忽略了插件文档中的说明,并像发布源 jar 一样发布了影子 jar:

对单个项目执行此操作的最简单方法是:

publishing {
    publications {
        Library(MavenPublication) {
            from project.components.java
            artifact tasks.sourceJar
            artifact tasks.shadowJar
        }
    }
}

如果您有多个项目(并非所有项目都应用了 shadowJar 插件)并且想要在根项目中添加此逻辑,您可以这样做:

subprojects {
    afterEvaluate {
        publishing {
            publications {
                Library(MavenPublication) {
                    from project.components.java
                    artifact tasks.sourceJar
                    if (project.tasks.findByName("shadowJar") != null) {
                        artifact tasks.shadowJar
                    }
                }
            }
        }        
    }
}
于 2020-07-22T14:45:04.740 回答