D:\java\rdt-ssh2\org.rubypeople.rdt.build\bootstrap\customTargets.xml:88: Could
not create \tmp\preFetch
        at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(Projec
tHelper.java:539)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:388)
        at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:106)

        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:635)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:539)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.ant.core.AntRunner.run(AntRunner.java:488)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformAct
ivator.java:335)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:273)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:129)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
        at org.eclipse.core.launcher.Main.run(Main.java:704)
        at org.eclipse.core.launcher.Main.main(Main.java:688)
Caused by: D:\eclipse\eclipse-3.0.1\plugins\org.eclipse.pde.build_3.0.1\scripts\
build.xml:46: The following error occurred while executing this line:
D:\java\rdt-ssh2\org.rubypeople.rdt.build\bootstrap\customTargets.xml:88: Could
not create \tmp\preFetch
        at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(Projec
tHelper.java:539)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:388)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        ... 23 more
Caused by: D:\java\rdt-ssh2\org.rubypeople.rdt.build\bootstrap\customTargets.xml
:88: Could not create \tmp\preFetch
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:227)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:178)
        at org.apache.tools.ant.taskdefs.Touch.execute(Touch.java:160)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        ... 29 more
Caused by: java.io.FileNotFoundException: \tmp\preFetch (The system cannot find
the path specified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at org.apache.tools.ant.util.FileUtils.createNewFile(FileUtils.java:1160
)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:225)
        ... 37 more
--- Nested Exception ---
D:\eclipse\eclipse-3.0.1\plugins\org.eclipse.pde.build_3.0.1\scripts\build.xml:4
6: The following error occurred while executing this line:
D:\java\rdt-ssh2\org.rubypeople.rdt.build\bootstrap\customTargets.xml:88: Could
not create \tmp\preFetch
        at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(Projec
tHelper.java:539)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:388)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:106)

        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:635)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:539)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.ant.core.AntRunner.run(AntRunner.java:488)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformAct
ivator.java:335)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:273)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:129)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
        at org.eclipse.core.launcher.Main.run(Main.java:704)
        at org.eclipse.core.launcher.Main.main(Main.java:688)
Caused by: D:\java\rdt-ssh2\org.rubypeople.rdt.build\bootstrap\customTargets.xml
:88: Could not create \tmp\preFetch
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:227)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:178)
        at org.apache.tools.ant.taskdefs.Touch.execute(Touch.java:160)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        ... 29 more
Caused by: java.io.FileNotFoundException: \tmp\preFetch (The system cannot find
the path specified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at org.apache.tools.ant.util.FileUtils.createNewFile(FileUtils.java:1160
)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:225)
        ... 37 more
--- Nested Exception ---
D:\java\rdt-ssh2\org.rubypeople.rdt.build\bootstrap\customTargets.xml:88: Could
not create \tmp\preFetch
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:227)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:178)
        at org.apache.tools.ant.taskdefs.Touch.execute(Touch.java:160)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:106)

        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:635)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:539)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.ant.core.AntRunner.run(AntRunner.java:488)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformAct
ivator.java:335)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:273)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:129)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
        at org.eclipse.core.launcher.Main.run(Main.java:704)
        at org.eclipse.core.launcher.Main.main(Main.java:688)
Caused by: java.io.FileNotFoundException: \tmp\preFetch (The system cannot find
the path specified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at org.apache.tools.ant.util.FileUtils.createNewFile(FileUtils.java:1160
)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:225)
        ... 37 more
--- Nested Exception ---
java.io.FileNotFoundException: \tmp\preFetch (The system cannot find the path sp
ecified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at org.apache.tools.ant.util.FileUtils.createNewFile(FileUtils.java:1160
)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:225)
        at org.apache.tools.ant.taskdefs.Touch.touch(Touch.java:178)
        at org.apache.tools.ant.taskdefs.Touch.execute(Touch.java:160)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:386)
        at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:106)

        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
        at org.apache.tools.ant.Task.perform(Task.java:364)
        at org.apache.tools.ant.Target.execute(Target.java:341)
        at org.apache.tools.ant.Target.performTasks(Target.java:369)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:635)
        at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRu
nner.java:539)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.ant.core.AntRunner.run(AntRunner.java:488)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformAct
ivator.java:335)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:273)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:129)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
        at org.eclipse.core.launcher.Main.run(Main.java:704)
        at org.eclipse.core.launcher.Main.main(Main.java:688)

Total time: 14 seconds