当我在GCE中运行jar时,它有以下错误:
java -jar mySimple.jar -project=myProjcet
Aug 13, 2015 1:22:26 AM com.google.cloud.dataflow.sdk.runners.DataflowPipelineRunner detectClassPathResourcesToStage
SEVERE: Unable to convert url (rsrc:./) to file.
Aug 13, 2015 1:22:26 AM simple.SimpleV1 main
SEVERE: Failed to construct instance from factory method com.google.cloud.dataflow.sdk.runners.BlockingDataflowPipelineRunner#fromOptions我正在开发Eclipse(窗口)。它成功地运行了通过eclipse的数据流。将项目打包到Runable文件并上传到GCE (ubuntu)。在GCE(ubuntu)上运行jar文件时出现了错误。
转轮是BlockingDataflowPipelineRunner(批处理模式)。源代码中还有其他选项。
下面是显而易见的。
Manifest-Version: 1.0
Rsrc-Class-Path: ./ httpclient-4.3.6.jar httpcore-4.3.3.jar commons-lo
gging-1.1.3.jar commons-codec-1.6.jar mybatis-3.2.8.jar mysql-connect
or-java-5.1.34.jar ibatis2-common-2.1.7.597.jar ibatis2-dao-2.1.7.597
.jar ibatis2-sqlmap-2.1.7.597.jar geoip-api-1.2.14.jar google-api-cli
ent-java6-1.20.0.jar google-api-client-1.20.0.jar google-oauth-client
-1.20.0.jar guava-jdk5-13.0.jar google-oauth-client-java6-1.20.0.jar
google-oauth-client-jetty-1.20.0.jar jetty-6.1.26.jar jetty-util-6.1.
26.jar servlet-api-2.5-20081211.jar google-http-client-jackson2-1.20.
0.jar google-http-client-1.20.0.jar jsr305-1.3.9.jar joda-time-2.8.1.
jar slf4j-api-1.7.7.jar slf4j-jdk14-1.7.7.jar commons-csv-1.1.jar aws
-java-sdk-sqs-1.10.5.1.jar aws-java-sdk-core-1.10.5.1.jar google-clou
d-dataflow-java-sdk-all-0.4.150710.jar google-api-services-dataflow-v
1b3-rev4-1.19.1.jar google-cloud-dataflow-java-proto-library-all-0.4.
150612.jar protobuf-java-2.5.0.jar google-api-services-bigquery-v2-re
v187-1.19.1.jar google-api-services-compute-v1-rev46-1.19.1.jar googl
e-api-services-pubsub-v1beta2-rev1-1.19.1.jar google-api-services-sto
rage-v1-rev25-1.19.1.jar google-api-services-datastore-protobuf-v1bet
a2-rev1-2.1.2.jar google-http-client-protobuf-1.15.0-rc.jar google-ht
tp-client-jackson-1.15.0-rc.jar jackson-annotations-2.4.2.jar jackson
-databind-2.4.2.jar avro-1.7.7.jar jackson-core-asl-1.9.13.jar jackso
n-mapper-asl-1.9.13.jar paranamer-2.3.jar snappy-java-1.0.5.jar commo
ns-compress-1.9.jar jetty-server-9.2.10.v20150310.jar javax.servlet-a
pi-3.1.0.jar jetty-http-9.2.10.v20150310.jar jetty-io-9.2.10.v2015031
0.jar jetty-jmx-9.2.10.v20150310.jar jetty-util-9.2.10.v20150310.jar
jackson-core-2.6.0.jar
Class-Path: .
Rsrc-Main-Class: simple.SimpleV1
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader发布于 2015-08-13 21:06:30
当使用Eclipse导出可运行的JAR文件时,有三种方法可以打包您的项目:
所有三个选项在执行时都有相同的使用模式。
java -jar myrunnable.jar --myCommandLineOption1=...目前,只有选项1与Dataflow SDK如何能够检测到所需的资源兼容,因为它依赖于来自URLClassLoader的文件URI。
要了解如何创建可运行的Jars以及更详细的原因,请阅读下面的文章。
使用可运行的Jars的另一种解决方案是使用mvn执行项目。
备选案文1
这将创建一个jar,它将每个单独jar中的所有类文件和资源复制到一个jar中。这允许一个清单,其中整个类路径由基于文件的URI组成:
Manifest-Version: 1.0
Main-Class: com.google.cloud.dataflow.starter.StarterPipeline
Class-Path: .选项2
这将创建一个jar文件,并在其中嵌入额外的jar。它使用一个定制的主入口点(org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader),它知道如何读取自定义清单条目(Rsrc Path&Rsrc Class),并创建一个具有非基于文件的URI的类加载器。由于Dataflow SDK for Java目前只知道如何处理基于文件的资源,而不知道如何解释rsrc:.乌里斯,你得到的例外是你看到了。
Manifest-Version: 1.0
Rsrc-Class-Path: ./ httpclient-4.3.6.jar ...
Class-Path: .
Rsrc-Main-Class: simple.SimpleV1
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader选项3
这将创建一个jar文件,其中包含项目资源,然后沿着runnable jar创建一个文件夹,其中包含所有依赖于jar的项目。这允许一个更复杂的标准清单,列出所有的项目依赖项。
Manifest-Version: 1.0
Main-Class: com.google.cloud.dataflow.starter.StarterPipeline
Class-Path: . runnable_lib/google-cloud-dataflow-java-sdk-all-manual_build.jar ...类路径清单没有返回URLClassLoader的一部分,因此这些类是不可发现的。此外,这些jar只能由jar中的类加载,这会导致jar加载层次结构。更多详细信息可在此处获得:http://docs.oracle.com/javase/7/docs/technotes/tools/findingclasses.html
https://stackoverflow.com/questions/31978566
复制相似问题