首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >detectClassPathResourcesToStage -无法转换url

detectClassPathResourcesToStage -无法转换url
EN

Stack Overflow用户
提问于 2015-08-13 02:33:20
回答 1查看 536关注 0票数 0

当我在GCE中运行jar时,它有以下错误:

java -jar mySimple.jar -project=myProjcet

代码语言:javascript
复制
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(批处理模式)。源代码中还有其他选项。

下面是显而易见的。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-13 21:06:30

当使用Eclipse导出可运行的JAR文件时,有三种方法可以打包您的项目:

  1. 将所需库提取到生成的JAR中
  2. 将所需的库打包到生成的JAR中
  3. 将所需库复制到生成的JAR旁边的子文件夹中。

所有三个选项在执行时都有相同的使用模式。

代码语言:javascript
复制
java -jar myrunnable.jar --myCommandLineOption1=...

目前,只有选项1与Dataflow SDK如何能够检测到所需的资源兼容,因为它依赖于来自URLClassLoader的文件URI。

要了解如何创建可运行的Jars以及更详细的原因,请阅读下面的文章。

使用可运行的Jars的另一种解决方案是使用mvn执行项目。

备选案文1

这将创建一个jar,它将每个单独jar中的所有类文件和资源复制到一个jar中。这允许一个清单,其中整个类路径由基于文件的URI组成:

代码语言:javascript
复制
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:.乌里斯,你得到的例外是你看到了。

代码语言:javascript
复制
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的项目。这允许一个更复杂的标准清单,列出所有的项目依赖项。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31978566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档