如何在没有阴影pom的情况下发布Gradle阴影jar

如何在没有阴影pom的情况下发布Gradle阴影jar,gradle,artifactory,shadow,publishing,shadowjar,Gradle,Artifactory,Shadow,Publishing,Shadowjar,我使用shadowjar插件()创建一个额外的jar文件,其中包含我的所有依赖项。我还希望保留默认生成的jar,它只有我的代码和资源。在发布jar之前,这是非常简单和直接的 由于我的shadowjar中包含了所有的dep,所以就发布而言,它的pom文件并不是我的优先事项。但是,如果我遵循shadowJar插件文档中的说明() 最后,我将两个不同的pom文件(一个用于常规jar文件,另一个用于影子jar)发布到相同的URL,其中一个覆盖另一个。此行为导致客户下载默认jar,但pom文件中没有任何依

我使用shadowjar插件()创建一个额外的jar文件,其中包含我的所有依赖项。我还希望保留默认生成的jar,它只有我的代码和资源。在发布jar之前,这是非常简单和直接的

由于我的shadowjar中包含了所有的dep,所以就发布而言,它的pom文件并不是我的优先事项。但是,如果我遵循shadowJar插件文档中的说明()

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


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

最终我忽略了插件文档中的说明,发布了shadow 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
                    }
                }
            }
        }        
    }
}
subprojects {
    afterEvaluate {
        publishing {
            publications {
                Library(MavenPublication) {
                    from project.components.java
                    artifact tasks.sourceJar
                    if (project.tasks.findByName("shadowJar") != null) {
                        artifact tasks.shadowJar
                    }
                }
            }
        }        
    }
}