为了账号安全,请及时绑定邮箱和手机立即绑定

Gradle - 如果项目仍然具有 SNAPSHOT 依赖项,则抛出异常

Gradle - 如果项目仍然具有 SNAPSHOT 依赖项,则抛出异常

LEATH 2021-09-12 20:48:34
如果当前项目仍然具有快照依赖项,我想使 gradle 构建失败。到目前为止,我的代码只查找 java 依赖项,缺少 .NET 依赖项,因此它仅适用于 java 项目。我想让它适用于所有项目。def addSnapshotCheckingTask(Project project) {    project.tasks.withType(JavaCompile) { compileJava ->        project.tasks.create(compileJava.name + 'SnapshotChecking', {            onlyIf {                project.ext.isRelease || project.ext.commitVersion != null            }            compileJava.dependsOn it            doLast {                def snapshots = compileJava.classpath                        .filter { project.ext.isRelease || !(it.path ==~ /(?i)${project.rootProject.projectDir.toString().replace('\\', '\\\\')}.*build.libs.*/) }                        .filter { it.path =~ /(?i)-SNAPSHOT/  }                        .collect { it.name }                        .unique()                if (!snapshots.isEmpty()) {                    throw new GradleException("Please get rid of snapshots for following dependencies before releasing $snapshots")                }            }        })    }}我需要一些帮助来泛化此代码段以适用于所有类型的依赖项(不仅仅是 Java)谢谢!LE 这样的事情可行吗? https://discuss.gradle.org/t/how-can-i-check-for-snapshot-dependencies-and-throw-an-exception-if-some-where-found/4064
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

所以我通过稍微调整@lance-java 的响应来让它工作,它看起来像:


    Task snapshotCheckingTask = project.tasks.create('snapshotCheckingTask', {

        doLast {

            def snapshots = new ArrayList()

            def projectConfigurations = project.configurations.findAll { true }


            projectConfigurations.each {

                if (it.isCanBeResolved()) {

                    it.resolvedConfiguration.resolvedArtifacts.each {

                        if (it.moduleVersion.id.version.endsWith('-SNAPSHOT')) {

                            snapshots.add(it)

                        }

                    }

                }

            }

            if (!snapshots.isEmpty()) {

                throw new GradleException("Please get rid of snapshots for following dependencies before releasing $snapshots")

            } else {

                throw new GradleException("Hah, no snapshots!")

            }

        }

    })

    project.tasks.release.dependsOn snapshotCheckingTask

抄送@尤金


PS 但是,这并没有考虑到 .net 依赖项


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 266 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信