gpt4 book ai didi

gradle - 从所有多项目Gradle构建依赖项生成CLASSPATH

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

我们正在使用外部测试工具(Squish),该工具会在构建主要gradle之后运行。这需要测试中的类的可见性。当前,CLASSPATH环境变量是通过各种bash脚本和其他字符串操作构建的。我的目标是自动完成此任务。

由于构建是在非常慢的源代码控制系统(透明)上完成的,因此,最好针对构建所遗留的类文件/ JAR运行测试,而不是额外复制/压缩到单个JAR等中。

类路径需要包含

  • 生成的JAR文件,通常在build / libs / project-x.jar中
  • 测试类通常是build / classes / test
  • 测试资源通常用于构建/资源/测试
  • 任何第3方的jar项目都依赖于log4j,spring等任何子项目。

  • 这是一个复杂的多项目构建,但是我已简化为以下示例,其中包含父级和两个 child 。

    父settings.gradle
    include ':child1'
    include ':child2'

    父build.gradle
    allprojects {
    apply plugin: 'java'
    repositories {
    mavenCentral()
    }
    }

    子级1 build.gradle
    dependencies {
    compile 'org.springframework:spring-context:4.1.2.RELEASE'
    compile 'org.springframework:spring-beans:4.1.2.RELEASE'
    }

    child 2 build.gradle
    dependencies {
    project (":child1")
    }

    到目前为止我所拥有的。这是正确的方法吗?是否可以简化或以更好的方式完全重写它?
    task createSquishClasspath << {
    def paths = new LinkedHashSet()
    paths.addAll(subprojects.configurations.compile.resolvedConfiguration.resolvedArtifacts.file.flatten())
    paths.addAll(subprojects.jar.outputs.files.asPath)
    paths.addAll(subprojects.sourceSets.test.output.resourcesDir)
    paths.addAll(subprojects.sourceSets.test.output.classesDir)

    paths.each {
    println "${it}"
    }

    println paths.join(File.pathSeparator)

    }

    输出量
    C:\so-question\Parent\local-repo\spring\spring-context-4.1.2.RELEASE.jar
    C:\so-question\Parent\local-repo\spring\spring-beans-4.1.2.RELEASE.jar
    C:\so-question\Parent\child1\build\libs\child1.jar
    C:\so-question\Parent\child2\build\libs\child2.jar
    C:\so-question\Parent\child1\build\resources\test
    C:\so-question\Parent\child2\build\resources\test
    C:\so-question\Parent\child1\build\classes\test
    C:\so-question\Parent\child2\build\classes\test

    最佳答案

    总而言之,到目前为止最好的答案是将项目依赖项的所有路径以及所有test.output.resourcesDirtest.output.classesDir连接起来

    task createSquishClasspath << {
    def paths = new LinkedHashSet()
    paths.addAll(subprojects.configurations.compile.resolvedConfiguration.resolvedArtifacts.file.flatten())
    paths.addAll(subprojects.jar.outputs.files.asPath)
    paths.addAll(subprojects.sourceSets.test.output.resourcesDir)
    paths.addAll(subprojects.sourceSets.test.output.classesDir)

    paths.each {
    println "${it}"
    }

    println paths.join(File.pathSeparator)

    }

    关于gradle - 从所有多项目Gradle构建依赖项生成CLASSPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28986968/

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