![](/img/trans.png)
[英]How to add classpath to Gradle JavaExec task to execute a runnable jar?
[英]Using a wildcard in a JavaExec classpath with Gradle
我有一个Gradle侧面版本,可以在我拥有的另一个旧Ant版本上运行一些测试。 那个老Ant构建中有图书馆的一吨 ,我想我的运行测试,有那些在类路径当它运行的测试工具(在这种情况下,黄瓜)摇篮构建。 但是,使庞大的依赖项列表保持同步似乎容易出错,并且将Ant构建转换为统一的Gradle构建并不是现在真正可行的事情(正如我想的那样)。
因此,我以为我可以简单地在JavaExec包装器的类路径中引用Ant构建中的jar文件。 似乎很简单,所以我尝试了这个:
javaexec {
...
classpath = sourceSets.main.output +
sourceSets.test.output +
fileTree(dir: libPath, include: '*.jar')
}
libPath
是包含所有jar文件的Ant构建的lib目录的路径。 但是,由于这里的依赖项数量巨大,因此我在执行时会收到以下可爱的运行时异常:
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中允许我执行此操作的内容,但是谁能想到解决此问题的好方法?
在这种情况下,看起来像是一个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)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.