繁体   English   中英

使用Gradle在JavaExec类路径中使用通配符

[英]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文件),它将起作用,缩短了类路径,但仍包含所有内容。 但是,由于这里的classpathFileCollection ,因此我没有看到一种将未使用的通配符直接提供给类路径的方法。

也许我缺少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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM