如何为每个项目发布多个工件

时间:2014-12-11 14:28:18

标签: gradle

我试图为每个项目发布多个工件。

How to upload an existing collection of 3rd-party Jars to a Maven server in Gradle?

我试图应用此解决方案 -

我的build.gradle看起来像:https://gist.github.com/anonymous/01b31c26eca7a507c14f

我尝试按照文档:http://www.gradle.org/docs/current/us ...

我得到的是:

出了什么问题:任务':install'的执行失败。无法发布配置'archives'> POM不能具有相同类型和分类器的多个工件。已经有MavenArtifact我的:jar:jar:null,试图添加MavenArtifact my:jar:jar:null。

我的环境:Gradle 2.2.1

建造时间:2014-11-24 09:45:35 UTC建筑编号:无修订版:6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a

Groovy:2.3.6 Ant:Apache Ant(TM)版本1.9.3编译于2013年12月23日JVM:1.7.0_71(Oracle Corporation 24.71-b01)操作系统:Windows 8.1 6.3 amd64

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

嗨,目前我有同样的问题,但在不同的背景下。我在我的java项目中使用proguard,我希望使用obiuvsly gradle有两个不同的工件。 我做了一个Proguard任务,它产生了一个模糊的.jar:

    task proguard(type: proguard.gradle.ProGuardTask)   
    {                                                
         injars 'build/libs/foundation.jar'
         outjars 'build/libs/foundationObfuscated.jar'  
    }

我们需要第二次将新工件添加到默认工件:

artifacts 
{
    archives(file: file("$projectDir/build/libs/foundationObfuscated.jar"), 
    builtBy: proguard)
            {
                classifier = 'obfuscated'
            }
}

您需要添加与默认值不同的新“分类器”。在此配置中,我还指定我的存档取决于之前的任务('proguard')。 最后我们可以上传两个工件:

uploadArchives {
    repositories.mavenDeployer {

        pom.groupId = 'com.groupid'
        pom.artifactId = 'artifactid'
        pom.version = "${versionMajorDevelop}.${buildTime()}"

        repository(url: "file://${workingLocalDirArtifact()}")
    }
}

这里我特别指出我要发布两个不同的工件(通用工具和'$ {versionMajorDevelop}。$ {buildTime()} - 混淆了' 在本地存储库'workingLocalDirArifact'中,但您可以使用其他配置。 默认情况下,Gradle将运行proguard任务,您将发布多个工件。

答案 1 :(得分:1)

我无法访问gist.github.com,因为我的雇主勉强阻止了它。因此,我不知道你想要达到什么目的。发布第三方罐子,如您发布的链接,或者您自己从项目中构建的其他工件。

如果后者不打扰令人讨厌的脚本,那么Gradle完全支持。你发布的错误说明了一切。

  

POM不能有多个具有相同类型和分类器的工件。

您需要为任何其他工件指定分类器。

假设您要上传带有部署包(您的jar加libs)的zip。它看起来像是:

task('applicationBundle', type: Zip) {
    classifier = 'distro'
    // ... code for zipping appropriate files
}

artifacts {
    archives applicationBundle
}

我没有测试过上面的例子,但应该这样做。

解释性词语 - 分类器将附加到工件文件名称作为后缀。

编辑:如果您使用 maven-publish 插件的新孵化API与Maven进行交互,这里是相关的示例(发布带源的附加jar):http://www.gradle.org/docs/current/dsl/org.gradle.api.publish.maven.MavenPublication.html