【问题标题】:How can i run an uberJar comprised of cucumber/groovy tests and dependencies我如何运行由 cucumber/groovy 测试和依赖项组成的 uberJar
【发布时间】:2016-07-24 10:27:05
【问题描述】:

这是我想要完成的:

为 EndToEndFunctionalTests 测试构建一个 uberJar:

task uberJar(type: Jar,dependsOn:[':compileGroovy']) {
    zip64 true
    from files(sourceSets.main.output.classesDir)
    from configurations.runtime.asFileTree.files.collect {zipTree(it) }
    with jar

}

结果,我得到:

EndToEndFunctionalTests-develop.local.SNAPSHOT.jar

所以我想要做的是执行这个:

$ java -jar EndToEndFunctionalTests-develop.local.SNAPSHOT.jar
no main manifest attribute, in EndToEndFunctionalTests-develop.local.SNAPSHOT.jar

有没有办法伪造一个 main() 并将其包含在 MANIFEST 中,所以这个 jar 会执行。

我能够使用 cucumber runner 通过 gradle 从命令行运行 cucumber 测试,但我想要的是能够运行 jar,因为:

  1. 我可以在任何地方运行这个 jar,因为它具有所有依赖项
  2. 我会缩短这些测试的运行时间,包括 staging 和 qa,因为我只需要完成一次,然后在各种环境中运行它,在持续集成管道中

【问题讨论】:

  • 如果有主目录,您可以将其包含在清单中。 “假主”是什么意思?运行 java -jar 时需要执行什么类?
  • @RaGe 这些是黄瓜/常规测试,因此没有 main() 方法。因此,如果您 jar xvf EndToEndFunctionalTests-develop.local.SNAPSHOT.jar 您将获得所有 .class 文件以及所有依赖项
  • 您可以使用 groovy 脚本来启动测试,并将 groovy 打包到您的 jar 中,这样您就可以将脚本作为可执行文件启动。见这里:mrhaki.blogspot.com/2013/09/…
  • 源代码文件都是.java文件,所以我这样做: jar cvf ExternalXApplicantSteps.jar ExternalXApplicantSteps.java added manifest added: ExternalXApplicantSteps.java(in = 7067) (out= 1541)(deflated 78 %) 但是当我运行时:groovy jar:file:ExternalXApplicantSteps.jar'!'/ExternalXApplicantSteps.jar 捕获:java.io.FileNotFoundException
  • 你为什么不使用 gradle 从命令行运行黄瓜测试?

标签: gradle jar uberjar


【解决方案1】:
src/main/groovy/Test.groovy

class Test{
        public static void main(String[] args){
                 println 'dummy main'
}

结果:

java -jar Serenity-develop.local.SNAPSHOT.jar
dummy main

它是可执行的,但现在我必须弄清楚我是否可以从这个类中调用 cucumber runner

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多