2016-03-04 72 views
0

我正在運行一個scala程序,在下面。我正在使用maven進行構建,並且我已經正確設置了依賴關係,並且maven安裝成功。但是當運行jar文件時,我得到java.lang.NoClassDefFoundError。找不到類的錯誤 - scala

計劃:

package RasterDataIngest.RasterDataIngestIntoHadoop 

import geotrellis.spark._ 
import geotrellis.spark.ingest._ 
import geotrellis.spark.io.hadoop._ 
import geotrellis.spark.io.index._ 
import geotrellis.spark.tiling._ 
import geotrellis.spark.utils.SparkUtils 
import geotrellis.vector._ 
import org.apache.hadoop.fs.Path 
import org.apache.spark._ 
import com.quantifind.sumac.ArgMain 
import com.quantifind.sumac.validation.Required 

class HadoopIngestArgs extends IngestArgs { 
    @Required var catalog: String = _ 
    def catalogPath = new Path(catalog) 
} 

object HadoopIngest extends ArgMain[HadoopIngestArgs] with Logging { 
    def main(args: HadoopIngestArgs): Unit = { 
    System.setProperty("com.sun.media.jai.disableMediaLib", "true") 

    implicit val sparkContext = SparkUtils.createSparkContext("Ingest") 
    val conf = sparkContext.hadoopConfiguration 
    conf.set("io.map.index.interval", "1") 

    val catalog = HadoopRasterCatalog(args.catalogPath) 
    val source = sparkContext.hadoopGeoTiffRDD(args.inPath) 
    val layoutScheme = ZoomedLayoutScheme() 

    Ingest[ProjectedExtent, SpatialKey](source, args.destCrs, layoutScheme, args.pyramid){ (rdd, level) => 
     catalog 
     .writer[SpatialKey](RowMajorKeyIndexMethod, args.clobber) 
     .write(LayerId(args.layerName, level.zoom), rdd) 
    } 
    } 
} 

的pom.xml:

<dependency> 
    <groupId>org.scala-lang</groupId> 
    <artifactId>scala-library</artifactId> 
    <version>${scala.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-core_2.10</artifactId> 
    <version>1.5.2</version> 
</dependency> 
<dependency> 
    <groupId>com.azavea.geotrellis</groupId> 
    <artifactId>geotrellis-spark_2.10</artifactId> //this is the one 
    <version>0.10.0-M1</version> 
</dependency> 
<dependency> 
    <groupId>org.scalaz.stream</groupId> 
    <artifactId>scalaz-stream_2.10</artifactId> 
    <version>0.7.2a</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-core</artifactId> 
    <version>0.20.2</version> 
</dependency> 
<dependency> 
    <groupId>com.quantifind</groupId> 
    <artifactId>sumac_2.10</artifactId> 
    <version>0.3.0</version> 
</dependency> 

錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: geotrellis/spark/ingest/IngestArgs 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2625) 
     at java.lang.Class.getMethod0(Class.java:2866) 
     at java.lang.Class.getMethod(Class.java:1676) 
     at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:670) 
     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: geotrellis.spark.ingest.IngestArgs 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 

請讓我知道我走錯了.. 由於事先在哪裏!

回答