diff --git a/java.json b/java.json
index 71df71aa..1b10b2bd 100644
--- a/java.json
+++ b/java.json
@@ -1,6 +1,6 @@
{
"id": "java",
- "version": "1.0.3",
+ "version": "1.0.4",
"description": "Java support for gauge",
"install": {
"windows": [],
diff --git a/pom.xml b/pom.xml
index 1b38dc4b..f522ed09 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
gauge-java
com.thoughtworks.gauge
gauge-java
- 1.0.3
+ 1.0.4
Java plugin for Gauge
https://github.com/getgauge/gauge-java
diff --git a/src/main/java/com/thoughtworks/gauge/ClasspathHelper.java b/src/main/java/com/thoughtworks/gauge/ClasspathHelper.java
index 5128c22a..161fae7b 100644
--- a/src/main/java/com/thoughtworks/gauge/ClasspathHelper.java
+++ b/src/main/java/com/thoughtworks/gauge/ClasspathHelper.java
@@ -5,9 +5,12 @@
*----------------------------------------------------------------*/
package com.thoughtworks.gauge;
+import org.reflections.vfs.Vfs;
+
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.stream.Collectors;
public class ClasspathHelper {
@@ -20,7 +23,9 @@ public static Collection getUrls() {
}
return urls;
}
- return org.reflections.util.ClasspathHelper.forJavaClassPath();
+ return org.reflections.util.ClasspathHelper.forJavaClassPath().stream()
+ .filter(url -> Vfs.getFile(url) != null)
+ .collect(Collectors.toList());
}
}
diff --git a/src/main/java/com/thoughtworks/gauge/scan/ClasspathScanner.java b/src/main/java/com/thoughtworks/gauge/scan/ClasspathScanner.java
index 6191cdb5..e7b202d9 100644
--- a/src/main/java/com/thoughtworks/gauge/scan/ClasspathScanner.java
+++ b/src/main/java/com/thoughtworks/gauge/scan/ClasspathScanner.java
@@ -39,7 +39,7 @@ private Reflections createReflections() {
Vfs.addDefaultURLTypes(new Vfs.UrlType() {
@Override
public boolean matches(URL url) {
- return "file".equals(url.getProtocol());
+ return "file".equals(url.getProtocol()) && Vfs.getFile(url) != null;
}
@Override
diff --git a/src/test/java/com/thoughtworks/gauge/ClasspathHelperTest.java b/src/test/java/com/thoughtworks/gauge/ClasspathHelperTest.java
new file mode 100644
index 00000000..c954d0af
--- /dev/null
+++ b/src/test/java/com/thoughtworks/gauge/ClasspathHelperTest.java
@@ -0,0 +1,40 @@
+/*----------------------------------------------------------------
+ * Copyright (c) ThoughtWorks, Inc.
+ * Licensed under the Apache License, Version 2.0
+ * See LICENSE.txt in the project root for license information.
+ *----------------------------------------------------------------*/
+package com.thoughtworks.gauge;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Collection;
+import java.util.List;
+
+import static com.thoughtworks.gauge.GaugeConstant.PACKAGE_TO_SCAN;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
+import static uk.org.webcompere.systemstubs.SystemStubs.restoreSystemProperties;
+
+public class ClasspathHelperTest {
+
+ @Test
+ public void testGetUrlsSkipsNonExistentClasspathEntries(@TempDir File tempDir) throws Exception {
+ assumeTrue(System.getenv(PACKAGE_TO_SCAN) == null);
+ File existingDir = new File(tempDir, "classes/kotlin/test");
+ existingDir.mkdirs();
+ File existingJar = new File(tempDir, "lib.jar");
+ existingJar.createNewFile();
+ File missingDir = new File(tempDir, "classes/java/test");
+ String classpath = String.join(File.pathSeparator,
+ existingDir.getAbsolutePath(), missingDir.getAbsolutePath(), existingJar.getAbsolutePath());
+
+ restoreSystemProperties(() -> {
+ System.setProperty("java.class.path", classpath);
+ Collection urls = ClasspathHelper.getUrls();
+ assertEquals(List.of(existingDir.toURI().toURL(), existingJar.toURI().toURL()), List.copyOf(urls));
+ });
+ }
+}