Gradle 格拉德尔';s PublishToEventLocal任务未正确执行

Gradle 格拉德尔';s PublishToEventLocal任务未正确执行,gradle,publish,artifacts,multi-project,Gradle,Publish,Artifacts,Multi Project,我正在尝试创建一个基于gradle的多模块项目。还有一个项目包含不同的gradle脚本,可以支持可插入的构建配置。其中一个脚本用于将工件发布到maven存储库。以下是该脚本的内容: apply plugin: 'maven-publish' configure(subprojects.findAll()) { if (it.name.endsWith('web')) { publishing { publications {

我正在尝试创建一个基于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
此脚本包含在其他项目的构建梯度文件中

apply from: '../../food-orders-online-main/artifact-publish.gradle'

当我运行构建任务时,它总是显示PublishToEventLocal任务是最新的,并且我在本地存储库中找不到工件。我做错了什么吗?

我认为这可能是gradle的一个缺陷的表现,模块可能会在以某种方式依赖它们时失去PublishMavenJavaPublicationToVenLocal任务

如果gradle确定模块没有PublishMavenJavaPublicationToEventLocal任务,则PublishToEventLocal任务将始终报告它是最新的

我发现的具体案例发生在多模块设置中,具有多个嵌套模块级别。它可以总结如下,其中shared:domain在被

root
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
我已经创建了一个小的示例项目来演示这种行为-

我还记录了gradle的一个错误-

目前我找到的解决办法是

  • 删除对共享域的依赖关系
  • 使用在其父模块生成文件中指定的配置创建子模块
  • 为共享域提供自己的gradle生成文件
  • 通过修改来自的答案,它对我有效

    publishing {
        publications {
            mavenJava(MavenPublication) {
                from components.java
            }
        }
        repositories {
            mavenLocal()
        }
    }
    

    也许可以查看--info和--debug日志。:food orders online admin business:PublishToAvenLocal(线程[main,5,main])STARTED.:食品订单在线管理业务:PublishToAvenLocal跳过任务:食品订单在线管理业务:PublishToAvenLocal,因为它没有任何操作:食品订单在线管理业务:PublishToAvenLocal最新:食品订单在线管理业务:PublishToAvenLocal(线程[main,5,main])已完成。花了0.007秒。我已经知道任务被跳过了。我的问题是为什么。我认为subprojects.findAll()不会返回任何内容。那么如何访问所有子项目?我可以在每个项目中单独做,但如果我能做到这一点,那将是重复和愚蠢的。谢谢你如此详细和解释清楚的答案。我想我会采取第三种解决方法。我也希望Gradle团队能尽快解决这个问题。考虑到我花了这么长时间才找到这个bug,我很高兴能与其他人分享解决方法。也许你应该在论坛上而不是在论坛上提出它。嗨,Mirko,我很乐意,但就我所知,提出问题的唯一方法是通过论坛,如果你知道其他,请提供我的链接,我可以注册添加错误的问题跟踪。Thanks@Karl你链接的页面上的文字说:“如果你想报告Gradle的问题,请使用discussion.Gradle.org创建一个“bug”帖子”,我上面帖子中的链接指向我差不多2年前提交的bug报告。参考:是否需要
    mavenLocal()
    bit?@dkb提供的链接声明:“您不需要在
    发布.存储库
    部分中有
    mavenLocal()
    。@M.Justin
    存储库。mavenLocal
    部分不是必需的。我的设置没有它,我的人工制品仍然被发布到我的本地
    .m2
    。这让我很开心。这对我有用。在不同的帖子中,有很多其他的建议,但只有这对我有效。谢谢:)