我的项目有两个模块, lib
和 lib-api
,具有以下职责
-
lib-api - 仅包含接口文件的纯java模块
-
lib - 一个安卓库
我希望jenkins将两个模块(作为jar)发布到内部artifactory服务器,以便其他项目可以使用 .
使用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 Integration
-
将工件发布到Artifactory
-
发布Maven描述符
-
使用Maven兼容模式
-
调用Gradle脚本
-
使用Gradle Wrapper
-
任务:
clean assemble -x preDexDebug -x preDexDAT -x preDexRelease
Artifactory repo中的结果
+-- 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中解决这个传递快照依赖?或者获取artifactory插件以gradle可以解决它的方式发布jar?
Working theory
我注意到 lib-api
文件夹没有_或者pom文件 . 我怀疑这可能是个问题 .
Artifactory的Jenkins插件使用了gradle artifactory插件,用于启用了Gradle-Artifactory集成的作业 . 根据gradle artifactory plugin docs,插件ID会根据您使用的是新的(maven-publish)还是旧的(maven)发布机制而改变 .
这可能是问题吗? Artifactory插件是否应用了错误的插件ID,可能是因为它基于android库模块做出决定?
1 回答
tl;dr 切换到旧的maven插件以进行gradle修复 .
我的
lib-api/build.gradle
现在看起来像这样