Skip to content

Commit

Permalink
[BEAM-2530] Make classloader handling more compatible with JDK 9
Browse files Browse the repository at this point in the history
From
http://www.oracle.com/technetwork/java/javase/9-relnote-issues-3704069.html:

> The application class loader is no longer an instance of
> java.net.URLClassLoader (an implementation detail that was never
> specified in previous releases). Code that assumes that
> ClassLoader::getSytemClassLoader returns a URLClassLoader object will
> need to be updated. Note that Java SE and the JDK do not provide an
> API for applications or libraries to dynamically augment the class
> path at run-time.
  • Loading branch information
cushon committed Jan 26, 2018
1 parent 1274938 commit 11e2ee9
Showing 1 changed file with 7 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
*/
package org.apache.beam.runners.core.construction;

import com.google.common.base.Splitter;
import com.google.common.base.StandardSystemProperty;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
Expand All @@ -37,6 +39,11 @@ public class PipelineResources {
* @return A list of absolute paths to the resources the class loader uses.
*/
public static List<String> detectClassPathResourcesToStage(ClassLoader classLoader) {
if (classLoader == ClassLoader.getSystemClassLoader()) {
return Splitter.on(File.pathSeparatorChar)
.splitToList(StandardSystemProperty.JAVA_CLASS_PATH.value());
}

if (!(classLoader instanceof URLClassLoader)) {
String message = String.format("Unable to use ClassLoader to detect classpath elements. "
+ "Current ClassLoader is %s, only URLClassLoaders are supported.", classLoader);
Expand Down

0 comments on commit 11e2ee9

Please sign in to comment.