我们正在使用外部测试工具(Squish),该工具在我们的主要gradle构建之后运行。这需要可见的测试类。目前,CLASSPATH环境变量是由各种bash脚本和其他字符串操作构建的。我的目标是让学生自动完成这项工作。
由于构建是在一个非常慢的源代码控制系统(clearcase)上完成的,因此测试最好是针对构建所留下的类文件/ JAR而不是额外的副本/压缩到单个JAR等。
类路径需要包含
这是一个复杂的多项目构建,但我已经简化为跟随父母和两个孩子的示例。
父settings.gradle
include ':child1'
include ':child2'
父build.gradle
allprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
}
Child 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
答案 0 :(得分:0)
总之,到目前为止,最好的答案是加入项目依赖项的所有路径以及所有test.output.resourcesDir
和test.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)
}