【问题标题】:Using a wildcard in a JavaExec classpath with Gradle在带有 Gradle 的 JavaExec 类路径中使用通配符
【发布时间】: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 文件),它会起作用,缩短类路径但仍然包括所有内容。但是,因为这里的classpathFileCollection,所以我看不到将通配符直接提供给未分解的类路径的方法。

也许我在 DSL 或 FileCollections 中遗漏了一些可以让我这样做的东西,但谁能想到解决这个问题的好方法?

【问题讨论】:

    标签: java gradle


    【解决方案1】:

    看起来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)
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多