我从’https://github.com/h2oai/h2o-droplets/tree/master/sparkling-water-droplet‘克隆了闪亮水滴项目。并分别使用./gradlew clean和./gradlew build清理并构建了项目。之后尝试使用以下命令运行项目
spark-submit –class water.droplets.SparklingWaterDroplet build/libs/sparkling-water-droplet-app.jar
然后得到了以下错误消息:
Exception in thread "main" java.lang.NoClassDefFoundError: water/fvec/Frameat water.droplets.SparklingWaterDroplet.main(SparklingWaterDroplet.scala)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImp.invoke(DelegatingMethodAccessorImp.java:43)at java.lang.reflect.Method.invoke(Method.java:497)at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:674)at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:120)at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)Caused by: java.lang.ClassNotFoundException: water.fvec.Frameat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 10 more
回答:
您需要运行./gradlew shadowJar
,并使用它创建的jar文件build/libs/sparkling-water-droplet-app.jar
,因为它会创建一个包含所有所需类的胖jar文件,而build
任务并不会这样做。