diff --git a/jcommons/org.eclipse.statet.jcommons.util-tests/META-INF/MANIFEST.MF b/jcommons/org.eclipse.statet.jcommons.util-tests/META-INF/MANIFEST.MF
index 574a5b5..83b7c28 100644
--- a/jcommons/org.eclipse.statet.jcommons.util-tests/META-INF/MANIFEST.MF
+++ b/jcommons/org.eclipse.statet.jcommons.util-tests/META-INF/MANIFEST.MF
@@ -7,5 +7,7 @@
 Bundle-Vendor: Eclipse StatET
 Bundle-Name: StatET JCommons - Util - Tests  (Incubation)
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.junit.jupiter.api;version="5.6.0",
- org.junit.jupiter.api.condition;version="5.6.0"
+Import-Package: org.opentest4j;version="[1.2,2)",
+ org.junit.jupiter.api;version="5.6.0",
+ org.junit.jupiter.api.condition;version="5.6.0",
+ org.junit.jupiter.api.function;version="5.6.0"
diff --git a/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/io/FileUtilsTest.java b/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/io/FileUtilsTest.java
new file mode 100644
index 0000000..64b33d0
--- /dev/null
+++ b/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/io/FileUtilsTest.java
@@ -0,0 +1,264 @@
+/*=============================================================================#
+ # Copyright (c) 2020 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.jcommons.io;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.ProcessBuilder.Redirect;
+import java.nio.file.FileSystemException;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.NotDirectoryException;
+import java.nio.file.Path;
+import java.util.concurrent.TimeUnit;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.EnabledOnOs;
+import org.junit.jupiter.api.condition.OS;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+public class FileUtilsTest {
+	
+	
+	public FileUtilsTest() {
+	}
+	
+	
+	@Test
+	public void getUserWorkingDirectory() {
+		assertEquals(FileUtils.getUserWorkingDirectory(),
+				new File(System.getProperty("user.dir")).toPath().toAbsolutePath() );
+	}
+	
+	
+	@Test
+	@SuppressWarnings("null")
+	public void requireFileName_requireNotNull() {
+		assertThrows(NullPointerException.class, () -> {
+			FileUtils.requireFileName(FileUtils.requireFileName(null));
+		});
+	}
+	
+	@Test
+	public void requireFileName() {
+		assertEquals(FileUtils.requireFileName(Path.of("dir/test")),
+				Path.of("test") );
+		assertThrows(IllegalArgumentException.class, () -> {
+			FileUtils.requireFileName(FileUtils.requireFileName(Path.of("/")));
+		});
+	}
+	
+	
+	@Test
+	@SuppressWarnings("null")
+	public void deleteRecursively_requireNotNull() throws IOException {
+		assertThrows(NullPointerException.class, () -> {
+			FileUtils.deleteRecursively(null);
+		});
+	}
+	
+	@Test
+	public void deleteRecursively() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= Files.createDirectory(testDir.resolve("dir"));
+		
+		Files.writeString(dir.resolve("file"), "Hello");
+		Files.writeString(dir.resolve("file_2"), "Hello");
+		final Path subDir= Files.createDirectory(dir.resolve("sub"));
+		Files.writeString(subDir.resolve("file"), "Hello");
+		
+		FileUtils.deleteRecursively(dir);
+		
+		assertTrue(Files.notExists(dir));
+	}
+	
+	@Test
+	public void deleteRecursively_notExisting() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= testDir.resolve("dir");
+		
+		FileUtils.deleteRecursively(dir);
+		
+		assertTrue(Files.notExists(dir));
+	}
+	
+	@Test
+	public void deleteRecursively_SymbolicLinkFile() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= Files.createDirectory(testDir.resolve("dir"));
+		
+		final Path targetFile= Files.writeString(testDir.resolve("file"), "Hello");
+		
+		Files.writeString(dir.resolve("file"), "Hello");
+		try {
+			Files.createSymbolicLink(dir.resolve("file-link"), targetFile);
+		}
+		catch (final UnsupportedOperationException | FileSystemException e) {
+			assumeFalse(true, e.toString());
+		}
+		
+		FileUtils.deleteRecursively(dir);
+		
+		assertTrue(Files.notExists(dir));
+		assertTrue(Files.exists(targetFile));
+	}
+	
+	@Test
+	public void deleteRecursively_SymbolicLinkDir() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= Files.createDirectory(testDir.resolve("dir"));
+		
+		final Path targetDir= Files.createDirectory(testDir.resolve("file"));
+		final Path targetDirFile= Files.writeString(targetDir.resolve("file"), "Hello");
+		
+		Files.writeString(dir.resolve("file"), "Hello");
+		try {
+			Files.createSymbolicLink(dir.resolve("dir-link"), targetDir);
+		}
+		catch (final UnsupportedOperationException | FileSystemException e) {
+			assumeFalse(true, e.toString());
+		}
+		
+		FileUtils.deleteRecursively(dir);
+		
+		assertTrue(Files.notExists(dir));
+		assertTrue(Files.exists(targetDir));
+		assertTrue(Files.exists(targetDirFile));
+	}
+	
+	@Test
+	public void deleteRecursively_HardLinkFile() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= Files.createDirectory(testDir.resolve("dir"));
+		
+		final Path targetFile= Files.writeString(testDir.resolve("file"), "Hello");
+		
+		Files.writeString(dir.resolve("file"), "Hello");
+		try {
+			Files.createLink(dir.resolve("file-link"), targetFile);
+		}
+		catch (final UnsupportedOperationException | FileSystemException e) {
+			assumeFalse(true, e.toString());
+		}
+		
+		FileUtils.deleteRecursively(dir);
+		
+		assertTrue(Files.notExists(dir));
+		assertTrue(Files.exists(targetFile));
+	}
+	
+	@Test
+	@EnabledOnOs(OS.WINDOWS)
+	public void deleteRecursively_WinJunctionDir() throws IOException, InterruptedException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= Files.createDirectory(testDir.resolve("dir"));
+		
+		final Path targetDir= Files.createDirectory(testDir.resolve("file"));
+		final Path targetDirFile= Files.writeString(targetDir.resolve("file"), "Hello");
+		
+		Files.writeString(dir.resolve("file"), "Hello");
+		try {
+			final Path linkDir= dir.resolve("dir-link");
+			final Process t= new ProcessBuilder("cmd", "/C", "mklink", "/J", linkDir.toString(), targetDir.toString())
+					.directory(testDir.toFile())
+					.redirectOutput(Redirect.DISCARD)
+					.redirectErrorStream(true)
+					.start();
+			t.waitFor(5, TimeUnit.SECONDS);
+			assertTrue(Files.isDirectory(linkDir));
+		}
+		catch (final UnsupportedOperationException | FileSystemException e) {
+			assumeFalse(true, e.toString());
+		}
+		
+		FileUtils.deleteRecursively(dir);
+		
+		assertTrue(Files.notExists(dir));
+		assertTrue(Files.exists(targetDir));
+		assertTrue(Files.exists(targetDirFile));
+	}
+	
+	
+	@Test
+	@SuppressWarnings("null")
+	public void cleanDirectory_requireNotNull() throws IOException {
+		assertThrows(NullPointerException.class, () -> {
+			FileUtils.cleanDirectory(null);
+		});
+	}
+	
+	@Test
+	public void cleanDirectory_requireDirectory() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= testDir.resolve("dir");
+		
+		assertThrows(NoSuchFileException.class, () -> {
+			FileUtils.cleanDirectory(dir);
+		});
+		
+		Files.writeString(dir, "Hello");
+		assertThrows(NotDirectoryException.class, () -> {
+			FileUtils.cleanDirectory(dir);
+		});
+	}
+	
+	@Test
+	public void cleanDirectory() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= Files.createDirectory(testDir.resolve("dir"));
+		
+		final Path file1= Files.writeString(dir.resolve("file"), "Hello");
+		final Path file2= Files.writeString(dir.resolve("file_2"), "Hello");
+		final Path subDir= Files.createDirectory(dir.resolve("sub"));
+		Files.writeString(subDir.resolve("file"), "Hello");
+		
+		FileUtils.cleanDirectory(dir);
+		
+		assertTrue(Files.exists(dir));
+		assertTrue(Files.notExists(file1));
+		assertTrue(Files.notExists(file2));
+		assertTrue(Files.notExists(subDir));
+	}
+	
+	@Test
+	public void cleanDirectory_withFilter() throws IOException {
+		final Path testDir= Files.createTempDirectory("FileUtilsTest").toAbsolutePath();
+		final Path dir= Files.createDirectory(testDir.resolve("dir"));
+		
+		final Path file1= Files.writeString(dir.resolve("file"), "Hello");
+		final Path file2= Files.writeString(dir.resolve("file_2"), "Hello");
+		final Path subDir= Files.createDirectory(dir.resolve("sub"));
+		Files.writeString(subDir.resolve("file"), "Hello");
+		
+		FileUtils.cleanDirectory(dir,
+				(path) -> !nonNullAssert(path.getFileName()).toString().equals("file_2") );
+		
+		assertTrue(Files.exists(dir));
+		assertTrue(Files.notExists(file1));
+		assertTrue(Files.exists(file2));
+		assertTrue(Files.notExists(subDir));
+	}
+	
+}
diff --git a/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/runtime/UriUtilsTest.java b/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/io/UriUtilsTest.java
similarity index 61%
rename from jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/runtime/UriUtilsTest.java
rename to jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/io/UriUtilsTest.java
index 7801442..31c399c 100644
--- a/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/runtime/UriUtilsTest.java
+++ b/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/io/UriUtilsTest.java
@@ -12,16 +12,20 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.jcommons.runtime;
+package org.eclipse.statet.jcommons.io;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.net.URI;
 import java.net.URISyntaxException;
 
 import org.junit.jupiter.api.Test;
 
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+
+@NonNullByDefault
 public class UriUtilsTest {
 	
 	
@@ -57,6 +61,7 @@
 		assertEquals(false, UriUtils.isFileUrl("jar:/test/file.jar"));
 	}
 	
+	
 	@Test
 	public void isJarUrl() throws URISyntaxException {
 		assertEquals(true, UriUtils.isJarUrl(new URI("jar", "file:/test/file.jar!/", null)));
@@ -84,4 +89,66 @@
 		assertEquals(false, UriUtils.isJarUrl("file:/test/file.jar!/"));
 	}
 	
+	@Test
+	public void getJarFileUrl_requireJarUrl() throws URISyntaxException {
+		assertThrows(IllegalArgumentException.class, () -> {
+			UriUtils.getJarFileUrl(new URI("file:/test/file.jar"));
+		});
+		assertThrows(URISyntaxException.class, () -> {
+			UriUtils.getJarFileUrl(new URI("jar:file:/test/file.jar"));
+		});
+	}
+	
+	@Test
+	public void getJarFileUrl() throws URISyntaxException {
+		assertEquals(new URI("file:/test/file.jar"),
+				UriUtils.getJarFileUrl(new URI("jar:file:/test/file.jar!/")) );
+		
+		assertEquals(new URI("file:/test/file.jar"),
+				UriUtils.getJarFileUrl(new URI("jar:file:/test/file.jar!/path/file.txt")) );
+		
+		assertEquals(new URI("jar:file:/test/file.jar!/path/nested.jar"),
+				UriUtils.getJarFileUrl(new URI("jar:file:/test/file.jar!/path/nested.jar!/")) );
+	}
+	
+	@Test
+	public void getJarEntryPath_requireJarUrl() throws URISyntaxException {
+		assertThrows(IllegalArgumentException.class, () -> {
+			UriUtils.getJarEntryPath(new URI("file:/test/file.jar"));
+		});
+		assertThrows(URISyntaxException.class, () -> {
+			UriUtils.getJarEntryPath(new URI("jar:file:/test/file.jar"));
+		});
+	}
+	
+	@Test
+	public void getJarEntryPath() throws URISyntaxException {
+		assertEquals("",
+				UriUtils.getJarEntryPath(new URI("jar:file:/test/file.jar!/")) );
+		
+		assertEquals("path/file.txt",
+				UriUtils.getJarEntryPath(new URI("jar:file:/test/file.jar!/path/file.txt")) );
+		
+		assertEquals("",
+				UriUtils.getJarEntryPath(new URI("jar:file:/test/file.jar!/path/nested.jar!/")) );
+	}
+	
+	@Test
+	public void toJarUrl() throws URISyntaxException {
+		assertEquals(new URI("jar:file:/test/file.jar!/"),
+				UriUtils.toJarUrl("file:/test/file.jar") );
+		
+		assertEquals(new URI("jar:file:/test/file.jar!/path/nested.jar!/"),
+				UriUtils.toJarUrl("jar:file:/test/file.jar!/path/nested.jar") );
+	}
+	
+	@Test
+	public void toJarUrlString() throws URISyntaxException {
+		assertEquals("jar:file:/test/file.jar!/",
+				UriUtils.toJarUrlString("file:/test/file.jar") );
+		
+		assertEquals("jar:file:/test/file.jar!/path/nested.jar!/",
+				UriUtils.toJarUrlString("jar:file:/test/file.jar!/path/nested.jar") );
+	}
+	
 }
diff --git a/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntryTest.java b/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntryTest.java
index 1259973..4641328 100644
--- a/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntryTest.java
+++ b/jcommons/org.eclipse.statet.jcommons.util-tests/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntryTest.java
@@ -24,7 +24,6 @@
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
@@ -45,7 +44,7 @@
 	public void Entry_DevFolder() throws Exception { // in IDE
 		final String folder= nonNullAssert(System.getenv("STATET_TEST_FILES"));
 		
-		final Path path= Paths.get(
+		final Path path= Path.of(
 				new URI("file:/" + folder.replace('\\', '/') + "/bundle-locations/DevFolder/org.eclipse.statet-rj/core/org.eclipse.statet.rj.server") );
 		final BundleEntry entry= new BundleEntry.Dir("org.eclipse.statet.rj.server",
 				path, path.resolve("target/classes") );
@@ -59,7 +58,7 @@
 	public void Entry_SimpleServerJar() throws Exception { // in IDE
 		final String folder= nonNullAssert(System.getenv("STATET_TEST_FILES"));
 		
-		final Path path= Paths.get(
+		final Path path= Path.of(
 				new URI("file:/" + folder.replace('\\', '/') + "/bundle-locations/SimpleServerJar/rserver/org.eclipse.statet.rj.server.jar") );
 		final BundleEntry entry= new BundleEntry.Jar("org.eclipse.statet.rj.server", path);
 		
diff --git a/jcommons/org.eclipse.statet.jcommons.util/META-INF/MANIFEST.MF b/jcommons/org.eclipse.statet.jcommons.util/META-INF/MANIFEST.MF
index ba3e36a..d0cbf7f 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/META-INF/MANIFEST.MF
+++ b/jcommons/org.eclipse.statet.jcommons.util/META-INF/MANIFEST.MF
@@ -11,6 +11,7 @@
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.16.0";resolution:=optional
 Export-Package: org.eclipse.statet.jcommons.collections;version="4.3.0",
  org.eclipse.statet.jcommons.concurrent;version="4.3.0",
+ org.eclipse.statet.jcommons.io;version="4.3.0",
  org.eclipse.statet.jcommons.lang;version="4.3.0",
  org.eclipse.statet.jcommons.net;version="4.3.0",
  org.eclipse.statet.jcommons.rmi;version="4.3.0",
diff --git a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/FileUtils.java b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/FileUtils.java
new file mode 100644
index 0000000..1391046
--- /dev/null
+++ b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/FileUtils.java
@@ -0,0 +1,152 @@
+/*=============================================================================#
+ # Copyright (c) 2020 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.jcommons.io;
+
+import java.io.IOException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
+import java.nio.file.Files;
+import java.nio.file.NotDirectoryException;
+import java.nio.file.Path;
+import java.nio.file.attribute.BasicFileAttributes;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+
+@NonNullByDefault
+public class FileUtils {
+	
+	
+	private static final Path WORKING_DIRECTORY_REF_PATH= Path.of(""); //$NON-NLS-1$
+	
+	/**
+	 * Returns the current working directory (= system property {@code user.dir}).
+	 * 
+	 * @return the path of the working directory
+	 * 
+	 * @see System#getProperties()
+	 */
+	public static final Path getUserWorkingDirectory() {
+		return WORKING_DIRECTORY_REF_PATH.toAbsolutePath();
+	}
+	
+	
+	/**
+	 * Checks if the specified path is not empty (= has a {@link Path#getFileName() file name}) and
+	 * returns its file name.
+	 * 
+	 * @param path the path
+	 * @return the file name segment of the path
+	 * @throws IllegalArgumentException if the path is empty
+	 */
+	public static final Path requireFileName(final Path path) {
+		final Path fileName= path.getFileName();
+		if (fileName == null) {
+			throw new IllegalArgumentException("path is empty"); //$NON-NLS-1$
+		}
+		return fileName;
+	}
+	
+	
+	private static final FileVisitor<Path> DELETE_R_VISITOR = new FileVisitor<>() {
+		
+		@Override
+		public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs)
+				throws IOException {
+			if (attrs.isSymbolicLink() || attrs.isOther()) {
+				Files.delete(dir);
+				return FileVisitResult.SKIP_SUBTREE;
+			}
+			return FileVisitResult.CONTINUE;
+		}
+		
+		@Override
+		public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs)
+				throws IOException {
+			Files.delete(file);
+			return FileVisitResult.CONTINUE;
+		}
+		
+		@Override
+		public FileVisitResult visitFileFailed(final Path file, final IOException exc)
+				throws IOException {
+			throw exc;
+		}
+		
+		@Override
+		public FileVisitResult postVisitDirectory(final Path dir, @Nullable final IOException exc)
+				throws IOException {
+			Files.delete(dir);
+			return FileVisitResult.CONTINUE;
+		}
+		
+	};
+	
+	
+	/**
+	 * Deletes the specified file if it exists. If the file is a directory, its entries are deleted
+	 * recursively.
+	 * 
+	 * @param path the path of the file to delete
+	 * @return {@code true} if the file was deleted, {@code false} if the file does not exists
+	 * @throws IOException if an I/O error occurs
+	 */
+	public static final boolean deleteRecursively(final Path path) throws IOException {
+		if (Files.notExists(path)) {
+			return false;
+		}
+		Files.walkFileTree(path, DELETE_R_VISITOR);
+		return true;
+	}
+	
+	/**
+	 * Cleans the specified file directory.
+	 * 
+	 * @param path the path of the directory to clean
+	 * @param filter to select entries of the directory to delete
+	 * @throws NotDirectoryException if the file is not a directory
+	 * @throws IOException if an I/O error occurs
+	 */
+	public static final void cleanDirectory(final Path path,
+			final DirectoryStream.Filter<? super Path> filter) throws IOException {
+		try (final var stream= Files.newDirectoryStream(path, filter)) {
+			for (final Path entry : stream) {
+				deleteRecursively(entry);
+			}
+		}
+	}
+	
+	/**
+	 * Cleans the specified file directory.
+	 * 
+	 * @param path the path of the directory to clean
+	 * @throws NotDirectoryException if the file is not a directory
+	 * @throws IOException if an I/O error occurs
+	 */
+	public static final void cleanDirectory(final Path path) throws IOException {
+		try (final var entries= Files.newDirectoryStream(path)) {
+			for (final Path entry : entries) {
+				deleteRecursively(entry);
+			}
+		}
+	}
+	
+	
+	private FileUtils() {
+	}
+	
+}
diff --git a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/UriUtils.java b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/UriUtils.java
similarity index 92%
rename from jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/UriUtils.java
rename to jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/UriUtils.java
index 4fecdb8..4dd810b 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/UriUtils.java
+++ b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/io/UriUtils.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.jcommons.runtime;
+package org.eclipse.statet.jcommons.io;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -134,7 +134,10 @@
 	 * 
 	 * @param url the JAR URL
 	 * @return the URL of the archive file
-	 * @throws URISyntaxException
+	 * @throws IllegalArgumentException if the specified URL is not a JAR URL
+	 * @throws URISyntaxException if the specified URL is invalid
+	 * 
+	 * @see {@link #getJarEntryPath(URI)} for the other part of the URL
 	 */
 	public static final URI getJarFileUrl(final URI url) throws URISyntaxException {
 		assertJarUrlArgument(url);
@@ -162,8 +165,11 @@
 	 * Return the path of the entry inside the JAR archive.
 	 * 
 	 * @param url the JAR URL
-	 * @return the path of the entry as String
-	 * @throws URISyntaxException
+	 * @return the path of the entry as String (without leading slash)
+	 * @throws IllegalArgumentException if the specified URL is not a JAR URL
+	 * @throws URISyntaxException if the specified URL is invalid
+	 * 
+	 * @see {@link #getJarFileUrl(URI)} for the other part of the URL
 	 */
 	public static final String getJarEntryPath(final URI url) throws URISyntaxException {
 		assertJarUrlArgument(url);
@@ -185,7 +191,7 @@
 	 * @param jarFileUrlString URL as String pointing to the JAR file itself
 	 * @return the JAR URL as String
 	 * @throws URISyntaxException
-	 **/
+	 */
 	public static final URI toJarUrl(final String jarFileUrlString) throws URISyntaxException {
 		return new URI(toJarUrlString(jarFileUrlString));
 	}
@@ -196,7 +202,7 @@
 	 * @param jarFileUrlString URL as String pointing to the JAR file itself
 	 * @return the JAR URL as String
 	 * @throws URISyntaxException
-	 **/
+	 */
 	public static final String toJarUrlString(final String jarFileUrlString) throws URISyntaxException {
 		final StringBuilder sb= new StringBuilder(jarFileUrlString.length() + 6);
 		if (!isSchemeUrl(jarFileUrlString, JAR_SCHEME)) {
diff --git a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/ClassLoaderUtils.java b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/ClassLoaderUtils.java
index 6143a87..a6e3f28 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/ClassLoaderUtils.java
+++ b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/ClassLoaderUtils.java
@@ -17,9 +17,9 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.security.CodeSource;
 
+import org.eclipse.statet.jcommons.io.UriUtils;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 
@@ -99,7 +99,7 @@
 		}
 		try {
 			final URI uri= new URI(fileUrl);
-			final Path path= Paths.get(uri);
+			final Path path= Path.of(uri);
 			return path.toString();
 		}
 		catch (final URISyntaxException e) {
diff --git a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntry.java b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntry.java
index 9f0cf07..fb9fa9b 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntry.java
+++ b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/BundleEntry.java
@@ -22,10 +22,10 @@
 import java.nio.file.ProviderNotFoundException;
 
 import org.eclipse.statet.internal.jcommons.runtime.CommonsRuntimeInternals;
+import org.eclipse.statet.jcommons.io.UriUtils;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.runtime.CommonsRuntime;
-import org.eclipse.statet.jcommons.runtime.UriUtils;
 import org.eclipse.statet.jcommons.status.ErrorStatus;
 
 
diff --git a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/Bundles.java b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/Bundles.java
index 730556a..44220c0 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/Bundles.java
+++ b/jcommons/org.eclipse.statet.jcommons.util/src/org/eclipse/statet/jcommons/runtime/bundle/Bundles.java
@@ -26,7 +26,6 @@
 import java.nio.file.FileSystemNotFoundException;
 import java.nio.file.FileSystems;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -36,10 +35,10 @@
 
 import org.eclipse.statet.jcommons.collections.ImCollections;
 import org.eclipse.statet.jcommons.collections.ImList;
+import org.eclipse.statet.jcommons.io.UriUtils;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.runtime.ClassLoaderUtils;
-import org.eclipse.statet.jcommons.runtime.UriUtils;
 import org.eclipse.statet.jcommons.runtime.bundle.BundleEntryProvider.DevBinPathEntryProvider;
 import org.eclipse.statet.jcommons.runtime.bundle.BundleEntryProvider.JarFilePathEntryProvider;
 import org.eclipse.statet.jcommons.status.ErrorStatus;
@@ -338,7 +337,7 @@
 		FileSystem fs= null;
 		while (true) {
 			try {
-				final Path path= Paths.get(url);
+				final Path path= Path.of(url);
 				return path.normalize();
 			}
 			catch (final FileSystemNotFoundException e) {
diff --git a/jcommons/org.eclipse.statet.jcommons.util/srcERuntime/org/eclipse/statet/internal/jcommons/runtime/eplatform/EPlatformBundleResolver.java b/jcommons/org.eclipse.statet.jcommons.util/srcERuntime/org/eclipse/statet/internal/jcommons/runtime/eplatform/EPlatformBundleResolver.java
index 2e3a454..76a2fcd 100644
--- a/jcommons/org.eclipse.statet.jcommons.util/srcERuntime/org/eclipse/statet/internal/jcommons/runtime/eplatform/EPlatformBundleResolver.java
+++ b/jcommons/org.eclipse.statet.jcommons.util/srcERuntime/org/eclipse/statet/internal/jcommons/runtime/eplatform/EPlatformBundleResolver.java
@@ -22,7 +22,6 @@
 import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.Set;
 
 import org.osgi.framework.Bundle;
@@ -31,10 +30,10 @@
 import org.eclipse.core.runtime.Platform;
 
 import org.eclipse.statet.internal.jcommons.runtime.CommonsRuntimeInternals;
+import org.eclipse.statet.jcommons.io.UriUtils;
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.lang.ObjectUtils.ToStringBuilder;
-import org.eclipse.statet.jcommons.runtime.UriUtils;
 import org.eclipse.statet.jcommons.runtime.bundle.BundleEntry;
 import org.eclipse.statet.jcommons.runtime.bundle.BundleResolver;
 import org.eclipse.statet.jcommons.runtime.bundle.BundleSpec;
@@ -171,7 +170,7 @@
 			if (isJar && UriUtils.getJarEntryPath(url).isEmpty()) {
 				url= UriUtils.getJarFileUrl(url);
 			}
-			final Path path= Paths.get(url);
+			final Path path= Path.of(url);
 			if (Platform.inDevelopmentMode() && !isJar) {
 				final Path jClassPath;
 				if (Files.isDirectory(jClassPath= path.resolve("target/classes"))) {
