我正在尝试创建一个基于gradle的多模块项目。还有一个项目包含不同的gradle脚本,可以实现可插入的构建配置。其中一个脚本用于将工件发布到maven存储库。这是该脚本的内容:
apply plugin: 'maven-publish'
configure(subprojects.findAll()) {
if (it.name.endsWith('web')) {
publishing {
publications {
mavenWeb(MavenPublication) {
from components.web
}
}
}
} else {
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
}
}
build.dependsOn publishToMavenLocal
此脚本包含在其他项目的构建gradle文件中。
apply from: '../../food-orders-online-main/artifact-publish.gradle'
当我运行构建任务时,它总是显示publishToMavenLocal任务是最新的,我无法在本地存储库中找到工件。我做错了吗?
答案 0 :(得分:8)
通过调整here的答案,它对我有用。
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
mavenLocal()
}
}
答案 1 :(得分:4)
我认为这可能是gradle错误的表现,模块在以某种方式依赖时会失去publishMavenJavaPublicationToMavenLocal任务。
如果gradle确定模块没有publishMavenJavaPublicationToMavenLocal任务,那么publishToMavenLocal任务将始终报告它是最新的。
我发现的具体情况发生在多模块设置中,具有多级嵌套模块。它可以总结如下,其中共享:域依赖于A
失去其publishMavenJavaPublicationToMavenLocalroot
root gradle build file
->A
own gradle build file with dependency on shared:domain
-> shared
gradle build file for shared modules
-> shared:domain
-> shared:B
我创建了一个小示例项目,演示了此行为 - https://github.com/piersy/Gradle2MavenPublishBug
我还在这里用gradle记录了一个错误 - http://forums.gradle.org/gradle/topics/the-publishmavenjavapublicationtomavenlocal-task-disappears-from-a-project-when-that-project-is-depended-upon-in-a-specific-way
目前我找到的解决方法是