diff --git a/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java b/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java index aace0b6..e869f19 100644 --- a/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java +++ b/src/main/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategy.java @@ -55,7 +55,9 @@ public ClasspathResourceLocatorStrategy( public Location resolve(String locationSpecification, MessageHolder messageHolder) { ClassLoader cloader = Thread.currentThread().getContextClassLoader(); - URL resource = cloader.getResource(locationSpecification); + URL resource = cloader != null + ? cloader.getResource(locationSpecification) + : ClassLoader.getSystemResource(locationSpecification); Location location = null; diff --git a/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java b/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java index fd18b0b..6dff039 100644 --- a/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java +++ b/src/test/java/org/apache/maven/shared/io/location/ClasspathResourceLocatorStrategyTest.java @@ -47,6 +47,24 @@ void shouldFailToResolveMissingClasspathResource() { assertEquals(1, mh.size()); } + @Test + void shouldResolveWithSystemClassLoaderWhenContextClassLoaderIsNull() { + Thread thread = Thread.currentThread(); + ClassLoader contextClassLoader = thread.getContextClassLoader(); + MessageHolder messageHolder = new DefaultMessageHolder(); + + try { + thread.setContextClassLoader(null); + Location location = + new ClasspathResourceLocatorStrategy().resolve("META-INF/maven/test.properties", messageHolder); + + assertNotNull(location); + assertEquals(0, messageHolder.size()); + } finally { + thread.setContextClassLoader(contextClassLoader); + } + } + @Test void shouldResolveExistingClasspathResourceWithoutPrecedingSlash() { MessageHolder mh = new DefaultMessageHolder();