当前位置: 首页 > 知识库问答 >
问题:

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

刁星渊
2023-03-14

我有一个side Gradle构建,在另一个旧Ant构建上运行一些测试。旧的ant构建中有大量库,我希望运行测试的Gradle构建在运行测试工具(在本例中为cucumber)时,在其类路径中包含这些库。然而,保持庞大的依赖项列表的同步似乎容易出错,而且将Ant构建转换为统一的Gradle构建目前还不太可能(正如我所希望的那样)。

所以,我想我可以简单地在JavaExec包装器的类路径中引用Ant构建中的jar文件。看起来很简单,所以我试了一下:

javaexec {
    ...
    classpath = sourceSets.main.output +
                sourceSets.test.output +
                fileTree(dir: libPath, include: '*.jar')
}

libPath是蚂蚁构建的包含所有jar文件的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

我以前在蚂蚁建筑里见过这种歌舞。这是因为类路径太长了。如果我能自己明确定义类路径,我可以给它*。jarpath目录(未分解为单独的jar文件),它可以工作,缩短类路径,但仍然包括所有内容。然而,由于类路径这里是一个文件集合,我看不到一种直接向未分解的类路径提供通配符的方法。

也许我在DSL或文件集合中遗漏了一些可以让我做到这一点的东西,但是有人能想出一个好办法来解决这个问题吗?

共有1个答案

堵泽宇
2023-03-14

看起来在这种情况下,一个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)
        }
    }
}
 类似资料:
  • 问题内容: 我正在运行应该执行方法的Shell脚本: 在这一点上,我得到这个异常: 这是因为弹簧罐位于另一个文件夹中。所以我更改了脚本: 但是,使用此脚本无法找到com.example.ClassTest。关于这个问题有什么想法吗? 提前致谢 问题答案: Java类路径通配符扩展不常见。 从文档: 了解类路径通配符 类路径条目可以包含基本名称通配符,这被认为等效于指定目录中所有扩展名为.jar或.

  • 问题内容: 我希望Gradle构建脚本将完整的Classpath添加到构建后创建的JAR文件中包含的清单文件中。 例: 我的构建脚本已经通过这种方式向清单添加了一些信息: 如何获取要添加到清单的依赖项列表? Java教程的此页面详细描述了如何以及为什么向清单中添加类路径:将类添加到JAR文件的类路径中 问题答案: 在Gradle的论坛上找到了一个解决方案: 来源:子项目的Jar任务中带有类路径的清

  • 我希望我的Gradle构建脚本将完整的类路径添加到构建后创建的JAR文件中包含的清单文件中。 如何获取要添加到清单中的依赖项列表? 这一页的Java教程更详细地描述了如何以及为什么将类路径添加到清单中:将类添加到JAR文件的类路径中

  • 问题内容: 我想知道是否以及如何在路径定义中使用通配符。我想更深入地查找一个文件夹并尝试使用*,但这不起作用。 我想访问随机文件夹中的文件。Folderstructure是这样的: 我试过的 先感谢您! 问题答案: 我认为不可能以这种方式使用通配符。我建议您对任务使用如下方式:

  • 问题内容: 我已经使用了太多的第三方库(jar文件),所以我的CLASSPATH完全混乱了,因为我必须包括我使用的每个jar文件的路径。 我一直在想是否可以使用通配符()运算符(例如 .jar)将所有jar文件包含在文件夹中。但这似乎不起作用。还有其他方法可以缩短PC上当前看起来像文章;)的CLASSPATH吗? 问题答案: 类路径条目可以包含基本名称通配符,该通配符被认为等效于指定目录中所有扩展

  • 问题内容: 我有一个C二进制文件,它通过JNI调用Java。我将CLASSPATH设置为somedir / *以获取somedir中的所有jar。 当我运行二进制文件时,找不到所需的类定义。当我跑步 在同一命令行中,该类已成功找到。如果我将somedir /中的所有jar都显式添加到类路径中,那么一切都很好,但这会导致 很 长的类路径,我想避免这种情况。 通过JNI执行的JVM是否支持类路径的通配