antexecenvironment-variablessetx

How to change the Path variable in ant exec task?


I tried setting the Path variable in ant exec task using this link. But its not working somehow. I am trying to add THRIFT_HOME which is set to basedir currently and I have the thrift.exe file in the basedir.

Also, when I change executable attribute value to thrift.exe, the thrift compiler works properly but the basedir is not added to the Path.

<exec executable="thrift">
    <env key="Path" value="${env.Path};${THRIFT_HOME}" />
</exec>

I also tried using the setx command as:

<exec executable="setx">
    <arg value="Path"/>
    <arg value="%Path%;${THRIFT_HOME}"/>
</exec>

but it still does not work.

Any help would be appreciated!


Solution

  • I am currently using on Windows 7 and the problem was with spaces in the folder name. That's a big problem when working on Windows.

    I tried placing the thrift executable at /d/thrift/ and it worked and assigning THRIFT_HOME = /d/thrift. Then I tried /d/thrift demo/ and there is the problem.

    D:\noknok_fido_to_ostp\noknok_fido_to_ostp_workspace\Demo\build.xml:33: Execute failed: java.io.IOException: Cannot run program "thrift-0.9.0.exe": CreateProces
    s error=2, The system cannot find the file specified
            at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
            at java.lang.Runtime.exec(Runtime.java:593)
            at org.apache.tools.ant.taskdefs.Execute$Java13CommandLauncher.exec(Execute.java:862)
            at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:481)
            at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:495)
            at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:631)
            at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:672)
            at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:498)
            at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
            at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
            at org.apache.tools.ant.Task.perform(Task.java:348)
            at org.apache.tools.ant.Target.execute(Target.java:392)
            at org.apache.tools.ant.Target.performTasks(Target.java:413)
            at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
            at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
            at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
            at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
            at org.apache.tools.ant.Main.runBuild(Main.java:811)
            at org.apache.tools.ant.Main.startAnt(Main.java:217)
            at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
            at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
    Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
            at java.lang.ProcessImpl.create(Native Method)
            at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
            at java.lang.ProcessImpl.start(ProcessImpl.java:30)
            at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
            ... 23 more
    

    Another problem is that /d/thrift doesn't work in Eclipse Ant plugin build. I tried it using command prompt and the build was successful.

    This teaches a new lesson: Always build from command prompt!

    Thanks to all who answered for this question.