【发布时间】:2019-02-13 17:05:26
【问题描述】:
我有一个 Gradle 构建,它在我拥有的另一个旧 Ant 构建上运行一些测试。旧的 ant 构建中有一个 TON 库,我希望运行测试的 Gradle 构建在运行测试工具(在本例中为 cucumber)时将这些库包含在其类路径中。但是,保持庞大的依赖关系列表同步似乎很容易出错,并且现在将 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 中遗漏了一些可以让我这样做的东西,但谁能想到解决这个问题的好方法?
【问题讨论】: