我的项目有两个模块,lib
并且lib-api
,具有以下职责
- lib-api - 仅包含接口文件的纯 java 模块
- lib - 一个安卓库
我想詹金斯将两个模块(作为罐子)发布到内部工件服务器,以便其他项目能够使用。
使用 Jenkins Artifactory 插件,我能够将两个模块的 jar 发布到 artifactory,但是我依赖的其他项目lib
无法构建并出现以下 gradle 错误
找不到 com.mygroup:lib-api:1.0.0-SNAPSHOT
我的设置
构建脚本
lib-api/build.gradle
apply plugin: 'java'
apply plugin: 'maven-publish'
group = 'com.mygroup'
version = project.version
publishing {
publications {
api(MavenPublication) {
from components.java
}
}
}
lib/build.gradle
apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
android { ... }
dependencies {
compile project(':lib-api')
}
group = 'com.mygroup'
version = project.version
Jenkins Artifactory 插件配置
- Gradle-Artifactory 集成
- 将工件发布到 Artifactory
- 发布 Maven 描述符
- 使用 Maven 兼容模式
- 将工件发布到 Artifactory
- 调用 Gradle 脚本
- 使用 Gradle 包装器
- 任务:
clean assemble -x preDexDebug -x preDexDAT -x preDexRelease
结果在 Artifactory 回购
+-- libs-snapshot-local
| +-- com
| | +-- mygroup
| | | +-- lib
| | | | +-- 1.0.0-SNAPSHOT
| | | | | `-- lib-1.0.0-20150508-1.jar
| | | | | `-- lib-1.0.0-20150508-1.pom
| | | | | `-- maven-metadata.xml
| | | | `-- maven-metadata.xml
| | | +-- lib-api
| | | | +-- 1.0.0-SNAPSHOT
| | | | | `-- lib-1.0.0-20150508-1.jar
问题
我的理解是,artifactory/gradle 应该足够聪明,可以解析-SNAPSHOT
为最新的时间戳快照,这似乎可以通过它设法解决lib
我指定latest.integration
或1.0.0-SNAPSHOT
我怎样才能让 gradle 解决这个来自工件的传递快照依赖?或者让artifactory插件以gradle可以解决的方式发布jar?
工作原理
我注意到该lib-api
文件夹没有 maven-metadata.xml 文件,并且快照版本文件夹也没有...或 pom 文件。我怀疑这可能是问题所在。
Artifactory 的 Jenkins 插件在后台使用 gradle artifactory 插件来处理启用了 Gradle-Artifactory 集成的作业。根据gradle artifactory plugin docs,插件 ID 的变化取决于您使用的是新的(maven-publish)还是旧的(maven)发布机制。
这可能是问题吗?Artifactory 插件是否应用了错误的插件 ID,可能是因为它基于 android 库模块做出决定?