从Ant执行带参数的Gradle命令报错:任务'iT --tests ...'未找到
解决Ant执行Gradle命令时参数传递错误的问题
你遇到的问题核心是Ant的<exec>任务不会自动拆分单个<arg>标签里的空格分隔内容,导致Gradle把一整串字符串当成了一个任务名称,自然找不到对应的iT --tests com.mygrailsapp.geb.**任务。
问题原因分析
在命令行直接执行./gradlew iT --tests com.mygrailsapp.geb.** -Dgeb.env=firefox -Dgrails.server.port.http=8090时,Shell会自动把空格分隔的内容拆分成多个独立的命令行参数传递给Gradle;但在Ant的<exec>里,如果你把多个参数写到同一个<arg value="..."/>中,Ant会将这整串内容作为单个参数传递,Gradle就会把它识别成一个任务名,而非iT任务加上后续的参数。
正确的写法
你需要把每个参数拆分成单独的<arg>标签,每个标签对应一个命令行参数:
<property name="gradlew" value="./gradlew"/> <target name="test-functional" description="run functional tests"> <antcall target="init"/> <antcall target="compile"/> <echo>Running functional tests...</echo> <exec executable="${gradlew}" failonerror="true"> <arg value="iT"/> <arg value="--tests"/> <arg value="com.mygrailsapp.geb.**"/> <arg value="-Dgeb.env=firefox"/> <arg value="-Dgrails.server.port.http=8090"/> </exec> </target>
这样Ant会把每个<arg>的内容作为独立参数传递给Gradle,和你在命令行执行的效果完全一致,就能正常运行指定的Geb功能测试了。
内容的提问来源于stack exchange,提问作者dre
相关产品推荐
相关产品推荐

