我的项目有两个模块,lib
和lib-api
,具有以下职责
我希望jenkins将两个模块(作为jar)发布到内部工件服务器,以便其他项目能够使用。
使用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
clean assemble -x preDexDebug -x preDexDAT -x preDexRelease
+-- 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
是否指定{ {1}}或latest.integration
如何让gradle从artifactory中解决这个传递快照依赖?或者让graory插件以gradle可以解析它的方式发布jar?
工作理论
我注意到1.0.0-SNAPSHOT
文件夹没有maven-metadata.xml文件,快照版本文件夹没有...或pom文件。我怀疑这可能是个问题。
Artifactory的Jenkins插件使用了gradle artifactory插件,用于启用了Gradle-Artifactory集成的作业。根据{{3}},插件ID的变化取决于您使用的是新的(maven-publish)还是旧的(maven)发布机制。
这可能是问题吗? Artifactory插件是否应用了错误的插件ID,可能是因为它正在根据android库模块做出决定?
答案 0 :(得分:2)
tl; dr 切换到旧的maven插件以进行gradle修复。
我的lib-api/build.gradle
现在看起来像这样
apply plugin: 'java'
apply plugin: 'maven'
group = 'com.mygroup'
version = project.version
ext.artifactId = project.name.toLowerCase()
project.archivesBaseName = project.artifactId
uploadArchives {
repositories {
mavenDeployer {
pom.artifactId = project.artifactId
}
}
}
注意:根据
maven
插件的gradle文档,如果您设置了archivesBaseName,则必须明确定义pom.artifactId
。这可能是我之前配置的根本问题,但我没有回去测试它。