美文网首页
arthas实践 sbt Missing scala-libra

arthas实践 sbt Missing scala-libra

作者: oo_思维天空 | 来源:发表于2019-01-24 21:04 被阅读0次
    • 在使用sbt构建一个spark 的项目的时候 遇到一个很奇怪的问题 Missing scala-library.jar 如下图. 按理来说如果少jar包sbt 会自动去下载的 这个就很奇怪了.


    • 于是想到用arthas 看一下.首先在arthas中用jad反编译了下scala.sys.pachage$ 的代码 .

    $ jad -c 42a57993 "scala.sys.package$"
    
    ClassLoader:
    +-sun.misc.Launcher$AppClassLoader@42a57993
      +-sun.misc.Launcher$ExtClassLoader@10d307f1
    
    Location:
    /usr/local/Cellar/sbt/1.2.8/libexec/bin/sbt-launch.jar
    
    /*
     * Decompiled with CFR 0_132.
     */
    package scala.sys;
    
    import scala.runtime.Nothing$;
    import scala.sys.SystemProperties;
    
    public final class package$ {
        public static final package$ MODULE$;
    
        private package$() {
            MODULE$ = this;
        }
    
        static {
            new scala.sys.package$();
        }
    
        public static SystemProperties props() {
            return new SystemProperties();
        }
    
        public static Nothing$ error(String string) {
            throw new RuntimeException(string);
        }
    }
    
    Affect(row-cnt:1) cost in 361 ms.
    
    • 这里的error只是抛了个异常 没有其他的东西. 那只能在堆栈中往上继续找. 看到sbt.Defaults$.file$1这个方法比较像. 继续反编译看下代码
      这块反编译代码比较长 , 所以可以将结果是保存到一个文件中
    $ jad "sbt.Defaults$" >> &
    job id  : 10
    cache location  : /Users/.../logs/arthas-cache/27659/10
    

    在logs/arthas-cache/27659/10文件中找到file$1这个方法

     841     private static final File file$1(String id, ConfigurationReport toolReport$1) {
     842         return (File)Defaults$.files$1(id, toolReport$1).headOption().getOrElse(() -> package$.MODULE$.error(new StringContext((Seq)Predef$.MODULE$.wrapRefArray(new String[]     {"Missing ", ".jar"})).s((Seq)Predef$.MODULE$.genericWrapArray(new Object[]{id}))));
     843     }
    
    • 上面这块代码粗略一看 是找文件, 如果文件没找到就会抛出一个missing 的异常 .
    • 于是 使用下面的命令看一下传的入参
    watch -b -x 4 "sbt.Defaults$" "file$1" params
    
    • 果然在参数中找到了scala-library字样 并且还有这个jar包路径.


    • 那继续我们去这个路径下看下 , 如下图确实少了jar文件. 但是目录是有的. 这很有可能是以前下载jar文件时中断了, 导致jar包没有但是目录还在


    • 那处理就很简单. 把这个目录删掉. 重新构建. 重新构建 sbt就会自动下载jar包了 问题解决了...


    相关文章

      网友评论

          本文标题:arthas实践 sbt Missing scala-libra

          本文链接:https://www.haomeiwen.com/subject/uufujqtx.html