![](/img/trans.png)
[英]How do I use the Java ClassLoader to load a file fromthe classpath?
[英]Java/Dataflow - Unable to use ClassLoader to detect classpath elements
我猜这更像是一个普通的Java / Eclipse问题,但我不是一个Java人,这不是为了点击我。 最后堆栈跟踪。
上面是抛出错误的文件,它非常简单 - 我们是否使用URLClassLoader
? 不是一个Java人,我不明白如何切换到URLClassLoader
并谷歌搜索这让我觉得这不是我需要关注的事情。
"Unable to use ClassLoader to detect classpath elements"
让我觉得我错误地添加了一个类路径,Eclipse正在做一些奇怪的事情。
Google dataflow / apache beam文档都没有提到有关URLClassLoader
任何内容,现在我甚至无法让他们的示例项目运行。 我很确定我做了什么,但我不确定是什么。
任何帮助,将不胜感激。
Jan 16, 2018 8:03:48 PM org.apache.beam.runners.dataflow.DataflowRunner
detectClassPathResourcesToStage
SEVERE: Unable to use ClassLoader to detect classpath elements. Current ClassLoader is jdk.internal.loader.ClassLoaders$AppClassLoader@3b764bce, only URLClassLoaders are supported.
Exception in thread "main" java.lang.RuntimeException: Failed to construct instance from factory method DataflowRunner#fromOptions(interface org.apache.beam.sdk.options.PipelineOptions)
at org.apache.beam.sdk.util.InstanceBuilder.buildFromMethod(InstanceBuilder.java:233)
at org.apache.beam.sdk.util.InstanceBuilder.build(InstanceBuilder.java:162)
at org.apache.beam.sdk.PipelineRunner.fromOptions(PipelineRunner.java:52)
at org.apache.beam.sdk.Pipeline.create(Pipeline.java:142)
at twitchInsights.MainPipeline.main(MainPipeline.java:59)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.beam.sdk.util.InstanceBuilder.buildFromMethod(InstanceBuilder.java:222)
... 4 more
Caused by: java.lang.IllegalArgumentException: Unable to use ClassLoader to detect classpath elements. Current ClassLoader is jdk.internal.loader.ClassLoaders$AppClassLoader@3b764bce, only URLClassLoaders are supported.
at org.apache.beam.runners.dataflow.DataflowRunner.detectClassPathResourcesToStage(DataflowRunner.java:1365)
at org.apache.beam.runners.dataflow.DataflowRunner.fromOptions(DataflowRunner.java:244)
... 9 more
完全例外:
Thread [main] (Suspended (exception IllegalArgumentException))
DataflowRunner.detectClassPathResourcesToStage(ClassLoader) line: 1365
DataflowRunner.fromOptions(PipelineOptions) line: 244
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 564
InstanceBuilder<T>.buildFromMethod(Class<?>[]) line: 222
InstanceBuilder<T>.build() line: 162
PipelineRunner<ResultT>.fromOptions(PipelineOptions) line: 52
Pipeline.create(PipelineOptions) line: 142
MainPipeline.main(String[]) line: 60
我认为这是Java 9特有的问题。 Beam尚未正式支持Java 9 - 请参阅https://issues.apache.org/jira/browse/BEAM-2530了解当前进展情况。
您可以尝试通过--filesToStage
指定类路径元素来解决此特定问题(这将绕过基于当前类加载器的自动检测 - 这是失败的)。 但是你可能遇到其他问题。
在Java 9中适用于我的解决方法是基于类路径以编程方式定义filesToStage。
她是一个如何从类路径生成文件集的示例:
dataflowPipelineOptions.setFilesToStage(
Arrays.
asList(System.getProperty("java.class.path").split(File.pathSeparator)).
stream().
map(entry -> new File(entry).toString()).
collect(Collectors.toList())
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.