使用 Gradle 将包装的 OSGi 包发布到 artifactory
Publish wrapped OSGi bundles to artifactory with Gradle
由于并非所有 jar 都是自动可用的 OSGi 包,因此我使用包装来生成它们。包装后,我想将它们发布到我的 Artifactory 存储库中。然而,我对 Gradle 缺乏理解阻碍了成功,在阅读了几个建议的 Whosebug 答案后,我仍然卡住了。
这是我的 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
当我查看 artifactory 存储库时,结构不是我所期望的:
+- com
+--- google/code/gson/bundle-jars
|+-- 2.8.0
| +- bundle-jars.pom
+--- maven-metadata.xml
错误的目录结构(google/code/gson/bundle-jars),其中我期望有几个子目录(google、代码、gson)以及一个 2.8.0 和一个 jar 文件。
我想我必须更改发布版块,但我不知道它应该是什么。
我使用 unpuzzle (or rather this fork) 从 OSGi 包创建 Maven 工件(并将它们发布到 Artifactory)。
对于您的用例,这可能不是最有效的解决方案,但至少是可行的,我可以快速想出办法。
Here is an example 我为此使用 unpuzzle 的地方。也许这可以作为一个起点(连同 unpuzzle 文档)。在我的示例中有很多膨胀,因为我尝试实际确定从它们创建的 OSGi 包的原始 Maven 工件——因为您总是想要 OSGi 包,这可能与您无关。
请注意,默认情况下,已发布的工件将具有不同的名称(基于包符号名称)和不同的组(可配置)。但我认为这比拥有原始组和名称更可取,否则它可能会与原始名称混淆。如您在示例中所见,可以单独调整组和名称。
发布内容如下:
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")
}
}
}
由于并非所有 jar 都是自动可用的 OSGi 包,因此我使用包装来生成它们。包装后,我想将它们发布到我的 Artifactory 存储库中。然而,我对 Gradle 缺乏理解阻碍了成功,在阅读了几个建议的 Whosebug 答案后,我仍然卡住了。
这是我的 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
当我查看 artifactory 存储库时,结构不是我所期望的:
+- com
+--- google/code/gson/bundle-jars
|+-- 2.8.0
| +- bundle-jars.pom
+--- maven-metadata.xml
错误的目录结构(google/code/gson/bundle-jars),其中我期望有几个子目录(google、代码、gson)以及一个 2.8.0 和一个 jar 文件。
我想我必须更改发布版块,但我不知道它应该是什么。
我使用 unpuzzle (or rather this fork) 从 OSGi 包创建 Maven 工件(并将它们发布到 Artifactory)。
对于您的用例,这可能不是最有效的解决方案,但至少是可行的,我可以快速想出办法。
Here is an example 我为此使用 unpuzzle 的地方。也许这可以作为一个起点(连同 unpuzzle 文档)。在我的示例中有很多膨胀,因为我尝试实际确定从它们创建的 OSGi 包的原始 Maven 工件——因为您总是想要 OSGi 包,这可能与您无关。
请注意,默认情况下,已发布的工件将具有不同的名称(基于包符号名称)和不同的组(可配置)。但我认为这比拥有原始组和名称更可取,否则它可能会与原始名称混淆。如您在示例中所见,可以单独调整组和名称。
发布内容如下:
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")
}
}
}