为什么执行激活器会给出 ExceptionInInitializerError,原因是:java.security.NoSuchAlgorithmException:SHA1 MessageDigest 不可用?

Why does executing activator give ExceptionInInitializerError caused by: java.security.NoSuchAlgorithmException: SHA1 MessageDigest not available?

在 Windows 上用 Java 8 在 cygwin 上从 Typesafe Activator 1.2.12 执行 activator 时,出现以下异常:

java.lang.ExceptionInInitializerError                                                                                                                         
        at xsbt.boot.Update.settings$lzycompute(Update.scala:79)                                                                                              
        at xsbt.boot.Update.settings(Update.scala:74)                                                                                                         
        at xsbt.boot.Update.ivyLockFile$lzycompute(Update.scala:96)                                                                                           
        at xsbt.boot.Update.apply(Update.scala:103)                                                                                                           
        at xsbt.boot.Launch.update(Launch.scala:355)                                                                                                          
        at xsbt.boot.Launch.xsbt$boot$Launch$$retrieve(Launch.scala:210)                                                                                    
        at xsbt.boot.Launch$$anonfun.apply(Launch.scala:218)                                                                                                
        at scala.Option.getOrElse(Option.scala:120)                                                                                                           
        at xsbt.boot.Launch.xsbt$boot$Launch$$getAppProvider0(Launch.scala:218)                                                                               
        at xsbt.boot.Launch$$anon.call(Launch.scala:198)                                                                                                    
        at xsbt.boot.Locks$GlobalLock.withChannel(Locks.scala:98)                                                                                           
        at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries(Locks.scala:81)                                                        
        at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock.apply(Locks.scala:102)                                                                          
        at xsbt.boot.Using$.withResource(Using.scala:11)                                                                                                      
        at xsbt.boot.Using$.apply(Using.scala:10)                                                                                                             
        at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:62)                                                                                 
        at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:52)                                                                                                
        at xsbt.boot.Locks$.apply0(Locks.scala:31)                                                                                                            
        at xsbt.boot.Locks$.apply(Locks.scala:28)                                                                                                             
        at xsbt.boot.Launch.locked(Launch.scala:240)                                                                                                          
        at xsbt.boot.Launch.app(Launch.scala:149)                                                                                                             
        at xsbt.boot.Launch.app(Launch.scala:147)                                                                                                             
        at xsbt.boot.Launch$.run(Launch.scala:102)                                                                                                            
        at xsbt.boot.Launch$$anonfun$apply.apply(Launch.scala:36)                                                                                           
        at xsbt.boot.Launch$.launch(Launch.scala:117)                                                                                                         
        at xsbt.boot.Launch$.apply(Launch.scala:19)                                                                                                           
        at xsbt.boot.Boot$.runImpl(Boot.scala:44)                                                                                                             
        at xsbt.boot.Boot$.main(Boot.scala:20)                                                                                                                
        at xsbt.boot.Boot.main(Boot.scala)                                                                                                                    
Caused by: java.lang.RuntimeException: The SHA1 algorithm is not available in your classpath                                                                  
        at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.<clinit>(DefaultRepositoryCacheManager.java:86)                                            
        ... 29 more                                                                                                                                           
Caused by: java.security.NoSuchAlgorithmException: SHA1 MessageDigest not available                                                                           
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)                                                                                     
        at java.security.Security.getImpl(Security.java:695)                                                                                                  
        at java.security.MessageDigest.getInstance(MessageDigest.java:159)                                                                                    
        at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.<clinit>(DefaultRepositoryCacheManager.java:84)                                            
        ... 29 more                                                                                                                                           
Error during sbt execution: java.lang.ExceptionInInitializerError 

sbt 很有魅力。

什么是解决方案?

有一天我遇到了类似的错误,就我而言,我不得不手动解压缩一些 Java *.pack 文件。

$ find . -type f -name '*.pack'  
./jre/lib/charsets.pack          
./jre/lib/deploy.pack            
./jre/lib/ext/jfxrt.pack         
./jre/lib/ext/localedata.pack    
./jre/lib/javaws.pack            
./jre/lib/jsse.pack              
./jre/lib/plugin.pack            
./jre/lib/rt.pack                
./lib/tools.pack

每个文件都必须像 unpack200.exe jsse.pack jsse.jar 一样解压,然后 "The SHA1 algorithm is not available in your classpath" 的问题就解决了。