我试图为每个项目发布多个工件。
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
感谢您的帮助。
答案 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