cljam
cljam copied to clipboard
`dict` command after cljam 0.8.2 fails
$ cljam version
0.8.4
$ cljam dict test-resources/fasta/test.fa /tmp/test.dict
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.commons.compress.compressors.xz.XZUtils.<clinit>(XZUtils.java:59)
at org.apache.commons.compress.compressors.CompressorStreamFactory.detect(CompressorStreamFactory.java:271)
at org.apache.commons.compress.compressors.CompressorStreamFactory.createCompressorInputStream(CompressorStreamFactory.java:522)
at cljam.util$compressor_input_stream.invokeStatic(util.clj:122)
at cljam.io.fasta.core$reader.invokeStatic(core.clj:38)
at cljam.io.sequence$fasta_reader.invokeStatic(sequence.clj:20)
at cljam.algo.dict$create_dict.invokeStatic(dict.clj:9)
at cljam.tools.cli$dict.invokeStatic(cli.clj:297)
at cljam.tools.cli$run.invokeStatic(cli.clj:357)
at cljam.tools.main$_main.invokeStatic(main.clj:6)
at cljam.tools.main$_main.doInvoke(main.clj:6)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at cljam.tools.main.main(Unknown Source)
Caused by: java.lang.NullPointerException: Cannot invoke "Object.getClass()" because the return value of "java.lang.Class.getClassLoader()" is null
at org.apache.commons.compress.utils.OsgiUtils.<clinit>(OsgiUtils.java:31)
... 13 more
$ echo $?
1
<=0.8.1 succeeds but 0.8.2<= fails.
$ cljam version
0.8.1
$ cljam dict test-resources/fasta/test.fa /tmp/test.dict
$ echo $?
0
- 🙆♂️
java -jar ./target/cljam-0.8.5-SNAPSHOT-standalone.jar dict ./test-resources/fasta/test.fa /dev/stdout - 🙅♂️
./target/cljam dict ./test-resources/fasta/test.fa /dev/stdout - 🙅♂️
java -Xbootclasspath/a:./target/cljam-0.8.5-SNAPSHOT-standalone.jar cljam.tools.main dict ./test-resources/fasta/test.fa /dev/stdout
-
When loading the class
org.apache.commons.compress.utils.OsgiUtils, its static initializer callsgetClassLoaderbut the return value will benullwhen the class is loaded by a bootstrap classloader. -
lein-binplusadds the-Xbootclasspath/aoption when:bootclasspathis truthy - So this can be fixed by removing
:bootclasspath truein project.clj
@totakke Thank you for reporting the bug! I created a PR for this issue just now.
I also sent a PR to commons-compress. The :bootclasspath option can be re-enabled if the PR is merged.
Thank you so much for your quick fixing. 👍