加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 将exec’d批处理文件中的退出代码传播回ant

发布时间:2020-12-14 02:50:36 所属栏目:Windows 来源:网络整理
导读:我需要从蚂蚁那里打电话给sbt.我正在使用“exec”任务执行此操作,如下所示: target name="publish-jar" exec executable="sbt.bat" failonerror="true" arg value="publish"/ /exec /target 如果sbt任务失败,我需要ant任务“失败”,这就是使用failonerror =
我需要从蚂蚁那里打电话给sbt.我正在使用“exec”任务执行此操作,如下所示:

<target name="publish-jar">
    <exec executable="sbt.bat" failonerror="true">
      <arg value="publish"/>
    </exec>
  </target>

如果sbt任务失败,我需要ant任务“失败”,这就是使用failonerror =“true”的原因.但是,这不起作用.当sbt任务失败时,ant不会报告失败的构建.

这看起来像这里讨论的问题:Ant exec resultproperty is not working.建议的解决方法是从sbt.bat中删除“/ B”.换句话说,改变:

exit /B %ERROR_CODE%

exit %ERROR_CODE%

但是,正如一位评论者所说:

The downside of this is that if you run the batch file directly for testing it will terminate your shell. you could use an if and an arg in the batch file to select b when ant calls it and normal exit when not.

问题:当发生故障时是否有修复:(1)不终止调用者的shell和(2)将退出代码传播给ant?

更新

这是运行我的ant任务的输出.实际错误在这里并不重要(我故意不配置存储库来发布,强制错误):

C:devlasdf3modulestest>ant publish-jar
Buildfile: C:devlasdf3modulestestbuild.xml

publish-jar:
     [exec] [info] Loading global plugins from C:Usersjn.sbt.13plugins
     [exec] [info] Set current project to test (in build file:/C:/dev/la/sdf3/modules/test/)
     [exec] :: loading settings :: file = C:devlasdf3modulesivysettings.xml

     [exec] [info] :: delivering :: com.jn#test;SNAPSHOT ::
SNAPSHOT :: integration :: Fri Mar 14 08:45:58 HST 2014
     [exec] [info]      delivering ivy file to C:devlasdf3modulescom.jntargetscala-2.10ivy-SNAPSHOT.xml
     [exec] java.lang.RuntimeException: Repository for publishing is not specified.
     [exec]     at scala.sys.package$.error(package.scala:27)
     [exec]     at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1203)
     [exec]     at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1203)
     [exec]     at scala.Option.getOrElse(Option.scala:120)
     [exec]     at sbt.Classpaths$.getPublishTo(Defaults.scala:1203)
     [exec]     at sbt.Classpaths$$anonfun$57.apply(Defaults.scala:1037)
     [exec]     at sbt.Classpaths$$anonfun$57.apply(Defaults.scala:1037)
     [exec]     at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
     [exec]     at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
     [exec]     at sbt.std.Transform$$anon$4.work(System.scala:64)
     [exec]     at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
     [exec]     at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
     [exec]     at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
     [exec]     at sbt.Execute.work(Execute.scala:244)
     [exec]     at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
     [exec]     at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
     [exec]     at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
     [exec]     at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
     [exec]     at java.util.concurrent.FutureTask.run(FutureTask.java:262)
     [exec]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
     [exec]     at java.util.concurrent.FutureTask.run(FutureTask.java:262)
     [exec]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
     [exec]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
     [exec]     at java.lang.Thread.run(Thread.java:744)
     [exec] [error] (*:publishConfiguration) Repository for publishing is not specified.
     [exec] [error] Total time: 0 s,completed Mar 14,2014 8:45:59 AM

BUILD SUCCESSFUL
Total time: 4 seconds

解决方法

我刚做了一个简单的批次:
@echo关闭
回声[批]
退出/ b 2

从上面你的ant脚本,exec返回我的批处理中的错误代码.一切都很好.
执行官返回:2

这是在以下测试:
Apache Ant(TM)版本1.9.3于2013年12月23日在Windows 7 64位上编译

您应该粘贴批处理文件以及运行ant时获得的实际结果.要么使用的Ant版本有问题,要么(很可能)批处理文件有问题.

请执行下列操作

>从命令行运行sbt.bat发布
>之后立即运行echo%ERRORLEVEL%并记下结果

如果你得到0,你的批次就是问题所在.

编辑:
或者,有一个article here描述了一个使用macrodef的变通方法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读