使用Gradle将包装好的OSGi捆绑包发布到artifactory

使用Gradle将包装好的OSGi捆绑包发布到artifactory,gradle,osgi,artifactory,Gradle,Osgi,Artifactory,由于并非所有JAR都是自动可用的OSGi包,所以我使用包装来生成它们。包装完成后,我想将它们发布到我的Artifactory存储库中。然而,我对Gradle的理解不足阻碍了我的成功,在阅读了几个建议的答案后,我仍然被卡住了 这是我的build.gradle文件: buildscript { repositories { maven { url 'http://localhost:8081/artifactory/gradle-dev' } } de

由于并非所有JAR都是自动可用的OSGi包,所以我使用包装来生成它们。包装完成后,我想将它们发布到我的Artifactory存储库中。然而,我对Gradle的理解不足阻碍了我的成功,在阅读了几个建议的答案后,我仍然被卡住了

这是我的build.gradle文件:

    buildscript {
    repositories {
        maven { url 'http://localhost:8081/artifactory/gradle-dev' }
    }
    dependencies {
        classpath 'org.standardout:bnd-platform:1.2.0'
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+"
    }
    }

    apply plugin: 'org.standardout.bnd-platform'
    apply plugin: "com.jfrog.artifactory"
    apply plugin: 'maven-publish'

    group = 'com.google.code.gson'
    version = '2.8.0' 

    publishing {
        publications {
            osgiBundles(MavenPublication) {
                artifacts {
            files("build/plugins")
            }
            }
        }
    }

    artifactory {
            contextUrl = "${artifactory_contextUrl}"   //The base Artifactory URL if not overridden by the publisher/resolver

        publish {
                repository {
                        repoKey = 'gradle-dev-local'
                        username = "${artifactory_user}"
                        password = "${artifactory_password}"
                        maven = true
                }

            defaults {
                publications ('osgiBundles')
            }

            }

        resolve {
                repository {
                        repoKey = 'gradle-dev'
                        username = "${artifactory_user}"
                        password = "${artifactory_password}"
                        maven = true
                }
            }

    }

platform {
    useBndHashQualifiers = false
    defaultQualifier = ''
        bundle(group: 'com.google.code.gson', name:'gson', version:'2.8.0') {
          bnd {
            instruction 'Export-Package', 'com.google.gson,com.google.gson.stream,com.google.gson.annotations,com.google.gson.reflect'
                  }
        }
}
脚本的输出如下所示:

gradle artifactoryPublish
:generatePomFileForOsgiBundlesPublication
:artifactoryPublish
Deploying artifact: http://localhost:8081/artifactory/gradle-dev-local/com/google/code/gson/bundle-jars/2.8.0/bundle-jars-2.8.0.pom
Deploying build descriptor to: http://localhost:8081/artifactory/api/build
Build successfully deployed. Browse it in Artifactory under http://localhost:8081/artifactory/webapp/builds/bundle-jars/1489323863518
publishing {
    publications {
        osgiBundles(MavenPublication) {
        groupId 'my.group'
        artifactId 'com.google.code.gson'
        version '2.8.0'
        artifact file("build/plugins/com.google.code.gson_2.8.0.jar")
        }
    }
}
当我查看artifactory存储库时,结构不是我所期望的:

+- com
 +--- google/code/gson/bundle-jars
 |+-- 2.8.0
 | +- bundle-jars.pom
 +--- maven-metadata.xml 
错误的目录结构(google/code/gson/bundle-jars),我希望有几个子目录(google,code,gson)和一个2.8.0和一个jar文件

我想我必须更改publications块,但我不知道它应该是什么。

我使用(或者更确切地说)从OSGi捆绑包创建Maven工件(并将它们发布到Artifactory)

对于您的用例来说,这可能不是最有效的解决方案,但至少是一些有效的解决方案,我可以快速想出

我使用unpuzzle的地方。也许这可以作为一个起点(与unpuzzle文档一起)。在我的示例中有很多膨胀,因为在那里我试图实际确定从它们创建的OSGi捆绑包的原始Maven工件-因为您总是想要OSGi捆绑包,这可能与您无关


请注意,默认情况下,发布的工件将具有不同的名称(基于捆绑包符号名称)和不同的组(可配置)。但我认为这比拥有原始组和名称更可取,否则可能会与原始组和名称混淆。如示例所示,可以单独调整组和名称。

出版物应如下所示:

gradle artifactoryPublish
:generatePomFileForOsgiBundlesPublication
:artifactoryPublish
Deploying artifact: http://localhost:8081/artifactory/gradle-dev-local/com/google/code/gson/bundle-jars/2.8.0/bundle-jars-2.8.0.pom
Deploying build descriptor to: http://localhost:8081/artifactory/api/build
Build successfully deployed. Browse it in Artifactory under http://localhost:8081/artifactory/webapp/builds/bundle-jars/1489323863518
publishing {
    publications {
        osgiBundles(MavenPublication) {
        groupId 'my.group'
        artifactId 'com.google.code.gson'
        version '2.8.0'
        artifact file("build/plugins/com.google.code.gson_2.8.0.jar")
        }
    }
}