首页 > 解决方案 > Gradle Maven Publish插件:如何在没有artifactId的情况下上传具有任意名称的文件?

问题描述

我有一个项目,我必须将 YAML 文件上传到工件中。我希望它们位于工件中的特定路径,但我想自己确定全名,而名称中不存在 artifactId。

我有的

plugins {
    `maven-publish`
}

group = "com.example"
version = "0.0.1-SNAPSHOT"

repositories {
    mavenLocal()
}

// Example task for generating YAML files.
tasks.register("generateSomething") {
    doLast {
        buildDir.resolve("generated").mkdir()
        buildDir.resolve("generated/my-st-$version.yml").writeText("I am file for ST")
        buildDir.resolve("generated/my-prd-$version.yml").writeText("I am file for PRD")
    }
}

project.tasks.withType(AbstractPublishToMaven::class.java) {
    dependsOn("generateSomething")
}

publishing {
    publications {
        create<MavenPublication>("my-own-artifacts") {
            artifact(buildDir.resolve("generated/my-st-$version.yml")) {
                classifier = "st"
                extension = "$version.txt"
            }
            artifact(buildDir.resolve("generated/my-prd-$version.yml")) {
                classifier = "prd"
                extension = "$version.txt"
            }
        }
    }
}

当我运行时gradle publishToMavenLocal(artifactId 是 test-example),我在repository\com\example\test-example\0.0.1-SNAPSHOT\.

test-example-0.0.1-SNAPSHOT-prd.0.0.1-SNAPSHOT.yml
test-example-0.0.1-SNAPSHOT-st.0.0.1-SNAPSHOT.yml

但我想要的是:

prd.0.0.1-SNAPSHOT.yml
st.0.0.1-SNAPSHOT.yml

我试过的

我尝试将 artifactId 更改为my-st,但这会导致路径更改为com\example\my-set\...,这不是我想要的。我也尝试过使用分类器和扩展名,但它总是在名称前面加上我不想要的东西。

我在 MavenPublish 类中看不到任何其他可用的方法。

我检查了代码AbstractMavenPublisher.java,可能根本不可能:

        /**
         * Publishes a single module artifact, based on classifier and extension.
         */
        void publish(String classifier, String extension, File content) {
            StringBuilder path = new StringBuilder(128);
            path.append(groupPath).append('/');
            path.append(artifactId).append('/');
            path.append(moduleVersion).append('/');
            path.append(artifactId).append('-').append(artifactVersion);

            if (classifier != null) {
                path.append('-').append(classifier);
            }
            if (extension.length() > 0) {
                path.append('.').append(extension);
            }

            ExternalResourceName externalResource = new ExternalResourceName(rootUri, path.toString());
            publish(externalResource, content);
        }

但我不确定这是否是实际调用的代码。也许还有其他发布方式?

标签: gradleartifactorygradle-kotlin-dslmaven-publish

解决方案


推荐阅读