我有一个Gradle侧面版本,可以在我拥有的另一个旧Ant版本上运行一些测试。那个旧的ant构建中有一个 TON 库,我希望运行测试的我的Gradle构建在运行测试工具(在本例中为黄瓜)时,将其包含在其类路径中。但是,使庞大的依赖项列表保持同步似乎容易出错,并且将Ant构建转换为统一的Gradle构建现在还不是真正可行的事情(如我所愿)。
因此,我想我可以简单地在JavaExec包装器的类路径中引用Ant构建中的jar文件。似乎很简单,所以我尝试了这个:
javaexec {
...
classpath = sourceSets.main.output +
sourceSets.test.output +
fileTree(dir: libPath, include: '*.jar')
}
libPath
是Ant构建的lib目录的路径,该目录包含所有jar文件。但是,由于这里的依赖项数量巨大,因此我在执行时会得到一个可爱的运行时异常:
Caused by: java.io.IOException: Cannot run program "C:\Java\jdk1.8.0_161\bin\java.exe" (in directory "C:\development"): CreateProcess error=206, The filename or extension is too long
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
... 7 more
Caused by: java.io.IOException: CreateProcess error=206, The filename or extension is too long
... 8 more
我以前在Ant版本中看过这首歌和跳舞。这是因为类路径太长了。如果我可以自己明确定义类路径,则可以给它一个*.jar
路径目录(未分解为单独的jar文件),它将起作用,缩短了类路径,但仍包含所有内容。但是,由于这里的classpath
是FileCollection
,所以我看不到一种将通配符直接提供给未爆炸的类路径的方法。
也许我在DSL或FileCollections中缺少某些可以使我做到这一点的东西,但是没有人能想到解决此问题的好方法吗?
答案 0 :(得分:0)
在这种情况下,看起来像pathing jar就足够了:
task pathingJar(type: Jar) {
appendix = 'pathing'
doFirst {
manifest {
attributes 'Class-Path': fileTree(dir: libPath, include: '*.jar').join(' ')
}
}
}
task cucumber(dependsOn: 'pathingJar') {
doLast {
...
javaexec {
...
classpath = sourceSets.main.output +
sourceSets.test.output +
files(pathingJar.archivePath)
}
}
}