gpt4 book ai didi

java - 以编程方式从 ant-task 中检索返回码

转载 作者:行者123 更新时间:2023-11-30 11:42:18 25 4
gpt4 key购买 nike

以编程方式检索返回码时出现问题...以下文件。 (确实删掉了一些公司特有的东西)。我有 2 个文件,一个包含 java 任务的通用文件和一个定义 sime 属性和 ant 任务的特定文件。

如何在我执行的 java-test 中获取 build.rc?文件末尾的回显消息提供了实际的返回代码,但 p.getProperty("build.rc") 返回 null。

specific.build.xml

<project basedir="../../../.." name="run-joblauncher">
<property name="prop1" value="valProp1" />
<ant antfile="./dev/script/general.xml" dir="${basedir}" target="RUN-MYCLASS" inheritAll="true"/>
</project>

general.xml

<project basedir="../../../.." default="RUN-MYCLASS" name="run-specifictest"> <target name="RUN-MYCLASS"> 
<property name="returnCode" value="99"/>
<target name="RUN-MYCLASS">
<java classname="my.company.class" fork="true" resultproperty="build.rc" failonerror="false">
<arg value="${workdir}"/>
<classpath>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
</target>
</project>

myJunitTest.java

public class TestAntScripts extends TestCase {

public void testMyAnt() throws IOException {

File dir = new File("pathToSpecific.xml");

Project p = null;
try {
File buildFile = new File(buildFileName);
p = new Project();
DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);
p.addBuildListener(new CustomBuildListener(this));
p.fireBuildStarted();
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.fireBuildFinished(null);
} catch (BuildException e) {
p.fireBuildFinished(e);
e.printStackTrace();
System.err.println("AntRunner for buildfile " + buildFileName
+ " failed with Exception ");
}

String rc = p.getProperty("returnCode");
assertEquals(0, Integer.parseInt(rc));

}


public void taskFinished(String buildRc) {
assertEquals(0, buildRc);
}
}

编辑:

为已定义的属性赋值的方法如何?在 java-target 之外定义了一个 var returnCode 并尝试分配像 <var name="returnCode" value="${build.rc}"/> 这样的值目标内部。不跑了..

编辑 2:添加了一个自定义 BuildListener 并在那里获取了 build.rc。

  @Override
public void targetFinished(BuildEvent event) {

if (event.getTarget().getName().trim().equalsIgnoreCase("RUN-MYCLASS")) {
String buildRc = event.getTarget().getProject().getProperty("build.rc");
tester.taskFinished(buildRc, jobname);
}

tester是我的JUnit-Test,会在Constructor中设置。

最佳答案

添加了一个自定义的 BuildListener 并在那里获取了 build.rc。

@Override
public void targetFinished(BuildEvent event) {

if (event.getTarget().getName().trim().equalsIgnoreCase("RUN-MYCLASS")) {
String buildRc = event.getTarget().getProject().getProperty("build.rc");
tester.setReturnCode(buildRc);
}

然后像这样测试

assertEquals(0, Integer.parseInt(this.returnCode));

关于java - 以编程方式从 ant-task 中检索返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com