diff --git a/core/src/main/java/hudson/Platform.java b/core/src/main/java/hudson/Platform.java
index ccd1f2f..5408ea7 100644
--- a/core/src/main/java/hudson/Platform.java
+++ b/core/src/main/java/hudson/Platform.java
@@ -55,6 +55,10 @@
         if(File.pathSeparatorChar==':') return UNIX;
         return WINDOWS;
     }
+    
+    public static boolean isWindows() {
+    	return current().equals(WINDOWS);
+    }
 
     public static boolean isDarwin() {
         // according to http://developer.apple.com/technotes/tn2002/tn2110.html
diff --git a/core/src/main/java/hudson/tasks/junit/SuiteResult.java b/core/src/main/java/hudson/tasks/junit/SuiteResult.java
index 0b484ce..6af275c 100644
--- a/core/src/main/java/hudson/tasks/junit/SuiteResult.java
+++ b/core/src/main/java/hudson/tasks/junit/SuiteResult.java
@@ -23,15 +23,10 @@
  */
 package hudson.tasks.junit;
 
+import hudson.Platform;
 import hudson.tasks.test.TestObject;
 import hudson.util.IOException2;
 import hudson.util.io.ParserConfigurator;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import org.kohsuke.stapler.export.Exported;
-import org.kohsuke.stapler.export.ExportedBean;
 
 import java.io.File;
 import java.io.IOException;
@@ -49,6 +44,14 @@
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
+import org.apache.commons.io.FileUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.kohsuke.stapler.export.Exported;
+import org.kohsuke.stapler.export.ExportedBean;
 
 /**
  * Result of one test suite.
@@ -208,18 +211,7 @@
                 // look for ***-output.txt from TEST-***.xml
                 File mavenOutputFile = new File(xmlReport.getParentFile(),m.group(1)+"-output.txt");
                 if (mavenOutputFile.exists()) {
-                    try {
-                        RandomAccessFile raf = new RandomAccessFile(mavenOutputFile, "r");
-                        try {
-                            ByteBuffer bb = raf.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, mavenOutputFile.length());
-                            CharBuffer cb = Charset.defaultCharset().decode(bb);
-                            stdout = CaseResult.possiblyTrimStdio(cases, keepLongStdio, cb);
-                        } finally {
-                            raf.close();
-                        }
-                    } catch (IOException e) {
-                        throw new IOException2("Failed to read "+mavenOutputFile,e);
-                    }
+                    stdout = readStdoutFromFile(keepLongStdio, mavenOutputFile);
                 }
             }
         }
@@ -228,6 +220,29 @@
         this.stderr = stderr;
     }
 
+	private String readStdoutFromFile(boolean keepLongStdio, File mavenOutputFile) throws IOException2 {
+		final String result;
+		try {
+			if (!Platform.isWindows()) {
+				RandomAccessFile raf = new RandomAccessFile(mavenOutputFile, "r");
+				try {
+					ByteBuffer bb = raf.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, mavenOutputFile.length());
+					CharBuffer cb = Charset.defaultCharset().decode(bb);
+					result = CaseResult.possiblyTrimStdio(cases, keepLongStdio, cb);
+				} finally {
+					raf.close();
+				}
+			} else {
+				// "[...] Windows does not allow a mapped file to be deleted. [...]"
+				// see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4715154
+				result = FileUtils.readFileToString(mavenOutputFile);
+			}
+		} catch (IOException e) {
+		    throw new IOException2("Failed to read " + mavenOutputFile, e);
+		}
+		return result;
+	}
+
     /*package*/ void addCase(CaseResult cr) {
         cases.add(cr);
         casesByName().put(cr.getName(), cr);