gpt4 book ai didi

具有动态源目录的 Gradle Idea 插件

转载 作者:行者123 更新时间:2023-12-03 03:24:14 24 4
gpt4 key购买 nike

我有一个多项目构建。我写了一个插件,子项目用来配置测试,我们有 3 种测试风格,每个子项目都有单元测试,但不一定有其他 2。这些插件动态添加到 sourceSets,这可以被覆盖在子项目 build.gradle 中。

我看到的问题是这些测试路径在我生成它们时没有添加到 Idea 模块中,大概是因为在 Idea 插件识别源集之前没有评估我的插件。

顶层 build.gradle 将 Idea 插件应用到所有项目中,而测试插件应用在各个 build.gradle 文件中。

我的问题是:

  • 我对插件评估顺序的假设是否正确?
  • 如何影响此评估顺序,以便在评估 Idea 插件之前正确配置源集?

  • 非常感谢

    * 编辑 *

    在我有的插件中
        private SourceSet configureSourceSet(File classesDir, Project project, testSourceDir) {
    def sourceSet = project.sourceSets.create(sourceSetName())
    sourceSet.output.classesDir = classesDir
    configureClasspathDependencies(project, sourceSet)
    def file = new File("$project.projectDir/$testSourceDir")
    if (project.plugins.hasPlugin('scala')) {
    sourceSet.scala.srcDirs += [file]
    } else {
    sourceSet.java.srcDirs += [file]
    }
    return sourceSet
    }

    在模块 build.gradle 文件的顶部,我有
    apply plugin: 'unitTest'

    在顶级 gradle 文件中我有
    allprojects {
    ext.buildDir = './build'

    apply plugin: 'idea'
    apply plugin: 'eclipse'

    idea.module {
    excludeDirs += file('install')
    excludeDirs += file('target')
    excludeDirs += file('tests_log')
    excludeDirs += file('.settings')
    downloadSources = false
    }
    eclipse.classpath {
    downloadSources = false
    }
    }

    * 编辑 2 *
    private void configureTestTask(Project project, File classesDir, SourceSet sourceSet) {
    def testTask = project.tasks.create(taskName(), Test)
    testTask.testClassesDir = classesDir
    testTask.classpath = sourceSet.runtimeClasspath
    }

    最佳答案

    我的假设是不正确的。我下载了 gradle 插件源并找到了设置测试源的区域。

    private def configureIdeaModuleForJava(Project project) {
    project.ideaModule {
    sourceDirs = project.sourceSets.main.allSource.sourceTrees.srcDirs.flatten()
    testSourceDirs = project.sourceSets.test.allSource.sourceTrees.srcDirs.flatten()
    outputDir = project.sourceSets.main.classesDir
    testOutputDir = project.sourceSets.test.classesDir
    def configurations = project.configurations
    scopes = [
    COMPILE: [plus: [configurations.compile], minus: []],
    RUNTIME: [plus: [configurations.runtime], minus: [configurations.compile]],
    TEST: [plus: [configurations.testRuntime], minus: [configurations.runtime]]
    ]
    }
    }

    testSourceDirs 只选择源集进行测试,而我的名称有 testUtil。为了克服这个问题,我的 configureSourceSets 变为:
    private SourceSet configureSourceSet(File classesDir, Project project, testSourceDir) {
    def sourceSet = project.sourceSets.create(sourceSetName())
    sourceSet.output.classesDir = classesDir
    configureClasspathDependencies(project, sourceSet)
    def file = new File("$project.projectDir/$testSourceDir")
    if (project.plugins.hasPlugin('scala')) {
    sourceSet.scala.srcDirs += [file]
    } else {
    sourceSet.java.srcDirs += [file]
    }
    sourceSet.resources.srcDirs += [file]
    sourceSet.resources.exclude("**/*.java")
    sourceSet.resources.exclude("**/*.scala")
    if (project.plugins.hasPlugin("idea")) {
    project.idea.module {
    testSourceDirs += sourceSet.allSource.srcDirs.flatten()
    }
    }
    return sourceSet
    }

    关于具有动态源目录的 Gradle Idea 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229095/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com