【发布时间】: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,因为:
- 我可以在任何地方运行这个 jar,因为它具有所有依赖项
- 我会缩短这些测试的运行时间,包括 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 从命令行运行黄瓜测试?