adam-james-v / badspreadsheet

A Clojure Spreadsheet for building design tools.
MIT License
87 stars 1 forks source link

Prototype fails 'no such namespace' looking for SVG: suspect uberjar is needed? #1

Open simon-brooke opened 1 month ago

simon-brooke commented 1 month ago

As description.

Prototype fails; underlying problem seems to be Unable to resolve symbol: svg in this context:

simon@mason:~/Downloads$ java -jar badspreadsheet-prototype.jar 
Server started on Port:  8000
Error formulizing form:  (let [pts (p/regular-polygon-pts (c# 7) (c# 11))] (-> (path/polygon pts) (tf/style {:fill none, :stroke purple}) (tf/rotate 0) (tf/translate [0 0]))) #error {
 :cause No such namespace: p
 :via
 [{:type clojure.lang.Compiler$CompilerException
   :message Syntax error compiling at (0:0).
   :data {:clojure.error/phase :compile-syntax-check, :clojure.error/line 0, :clojure.error/column 0, :clojure.error/source NO_SOURCE_PATH}
   :at [clojure.lang.Compiler analyze Compiler.java 6825]}
  {:type java.lang.RuntimeException
   :message No such namespace: p
   :at [clojure.lang.Util runtimeException Util.java 221]}]
 :trace
 [[clojure.lang.Util runtimeException Util.java 221]
  [clojure.lang.Compiler resolveIn Compiler.java 7401]
  [clojure.lang.Compiler resolve Compiler.java 7375]
  [clojure.lang.Compiler analyzeSymbol Compiler.java 7336]
  [clojure.lang.Compiler analyze Compiler.java 6785]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$InvokeExpr parse Compiler.java 3832]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7126]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler access$300 Compiler.java 38]
  [clojure.lang.Compiler$LetExpr$Parser parse Compiler.java 6401]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7124]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7112]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler eval Compiler.java 7191]
  [clojure.lang.Compiler eval Compiler.java 7149]
  [clojure.core$eval invokeStatic core.clj 3215]
  [clojure.core$eval invoke core.clj 3211]
  [badspreadsheet.spreadsheet$formulize invokeStatic spreadsheet.clj 405]
  [badspreadsheet.spreadsheet$formulize invoke spreadsheet.clj 399]
  [badspreadsheet.spreadsheet$maybe_formulize invokeStatic spreadsheet.clj 412]
  [badspreadsheet.spreadsheet$maybe_formulize invoke spreadsheet.clj 409]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invokeStatic spreadsheet.clj 418]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invoke spreadsheet.clj 416]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 643]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 630]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invokeStatic spreadsheet.clj 717]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invoke spreadsheet.clj 705]
  [badspreadsheet.main$_main invokeStatic main.clj 9]
  [badspreadsheet.main$_main invoke main.clj 6]
  [clojure.lang.AFn applyToHelper AFn.java 152]
  [clojure.lang.AFn applyTo AFn.java 144]
  [badspreadsheet.main main nil -1]]}
Error formulizing form:  (let [n-shapes (c# 16) curve (p/bezier (c# 13)) path-pts (mapv curve (range 0 1 0.1)) pts (mapv (fn* [p1__242#] (curve (/ p1__242# (double n-shapes)))) (range n-shapes)) shape (c# 6)] (el/g (-> (path/polyline path-pts) (tf/translate [0 0]) (tf/style {:fill none, :stroke black})) (lo/pattern-on-pts shape pts))) #error {
 :cause No such namespace: p
 :via
 [{:type clojure.lang.Compiler$CompilerException
   :message Syntax error compiling at (0:0).
   :data {:clojure.error/phase :compile-syntax-check, :clojure.error/line 0, :clojure.error/column 0, :clojure.error/source NO_SOURCE_PATH}
   :at [clojure.lang.Compiler analyze Compiler.java 6825]}
  {:type java.lang.RuntimeException
   :message No such namespace: p
   :at [clojure.lang.Util runtimeException Util.java 221]}]
 :trace
 [[clojure.lang.Util runtimeException Util.java 221]
  [clojure.lang.Compiler resolveIn Compiler.java 7401]
  [clojure.lang.Compiler resolve Compiler.java 7375]
  [clojure.lang.Compiler analyzeSymbol Compiler.java 7336]
  [clojure.lang.Compiler analyze Compiler.java 6785]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$InvokeExpr parse Compiler.java 3832]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7126]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler access$300 Compiler.java 38]
  [clojure.lang.Compiler$LetExpr$Parser parse Compiler.java 6401]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7124]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7112]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler eval Compiler.java 7191]
  [clojure.lang.Compiler eval Compiler.java 7149]
  [clojure.core$eval invokeStatic core.clj 3215]
  [clojure.core$eval invoke core.clj 3211]
  [badspreadsheet.spreadsheet$formulize invokeStatic spreadsheet.clj 405]
  [badspreadsheet.spreadsheet$formulize invoke spreadsheet.clj 399]
  [badspreadsheet.spreadsheet$maybe_formulize invokeStatic spreadsheet.clj 412]
  [badspreadsheet.spreadsheet$maybe_formulize invoke spreadsheet.clj 409]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invokeStatic spreadsheet.clj 418]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invoke spreadsheet.clj 416]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 643]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 630]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invokeStatic spreadsheet.clj 717]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invoke spreadsheet.clj 705]
  [badspreadsheet.main$_main invokeStatic main.clj 9]
  [badspreadsheet.main$_main invoke main.clj 6]
  [clojure.lang.AFn applyToHelper AFn.java 152]
  [clojure.lang.AFn applyTo AFn.java 144]
  [badspreadsheet.main main nil -1]]}
Error formulizing form:  (svg (c# 6)) #error {
 :cause Unable to resolve symbol: svg in this context
 :via
 [{:type clojure.lang.Compiler$CompilerException
   :message Syntax error compiling at (0:0).
   :data {:clojure.error/phase :compile-syntax-check, :clojure.error/line 0, :clojure.error/column 0, :clojure.error/source NO_SOURCE_PATH}
   :at [clojure.lang.Compiler analyze Compiler.java 6825]}
  {:type java.lang.RuntimeException
   :message Unable to resolve symbol: svg in this context
   :at [clojure.lang.Util runtimeException Util.java 221]}]
 :trace
 [[clojure.lang.Util runtimeException Util.java 221]
  [clojure.lang.Compiler resolveIn Compiler.java 7431]
  [clojure.lang.Compiler resolve Compiler.java 7375]
  [clojure.lang.Compiler analyzeSymbol Compiler.java 7336]
  [clojure.lang.Compiler analyze Compiler.java 6785]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$InvokeExpr parse Compiler.java 3832]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7126]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler eval Compiler.java 7191]
  [clojure.lang.Compiler eval Compiler.java 7149]
  [clojure.core$eval invokeStatic core.clj 3215]
  [clojure.core$eval invoke core.clj 3211]
  [badspreadsheet.spreadsheet$formulize invokeStatic spreadsheet.clj 405]
  [badspreadsheet.spreadsheet$formulize invoke spreadsheet.clj 399]
  [badspreadsheet.spreadsheet$maybe_formulize invokeStatic spreadsheet.clj 412]
  [badspreadsheet.spreadsheet$maybe_formulize invoke spreadsheet.clj 409]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invokeStatic spreadsheet.clj 418]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invoke spreadsheet.clj 416]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 643]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 630]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invokeStatic spreadsheet.clj 717]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invoke spreadsheet.clj 705]
  [badspreadsheet.main$_main invokeStatic main.clj 9]
  [badspreadsheet.main$_main invoke main.clj 6]
  [clojure.lang.AFn applyToHelper AFn.java 152]
  [clojure.lang.AFn applyTo AFn.java 144]
  [badspreadsheet.main main nil -1]]}
Error formulizing form:  (svg (c# 12)) #error {
 :cause Unable to resolve symbol: svg in this context
 :via
 [{:type clojure.lang.Compiler$CompilerException
   :message Syntax error compiling at (0:0).
   :data {:clojure.error/phase :compile-syntax-check, :clojure.error/line 0, :clojure.error/column 0, :clojure.error/source NO_SOURCE_PATH}
   :at [clojure.lang.Compiler analyze Compiler.java 6825]}
  {:type java.lang.RuntimeException
   :message Unable to resolve symbol: svg in this context
   :at [clojure.lang.Util runtimeException Util.java 221]}]
 :trace
 [[clojure.lang.Util runtimeException Util.java 221]
  [clojure.lang.Compiler resolveIn Compiler.java 7431]
  [clojure.lang.Compiler resolve Compiler.java 7375]
  [clojure.lang.Compiler analyzeSymbol Compiler.java 7336]
  [clojure.lang.Compiler analyze Compiler.java 6785]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$InvokeExpr parse Compiler.java 3832]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7126]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler analyze Compiler.java 6762]
  [clojure.lang.Compiler$BodyExpr$Parser parse Compiler.java 6137]
  [clojure.lang.Compiler$FnMethod parse Compiler.java 5479]
  [clojure.lang.Compiler$FnExpr parse Compiler.java 4041]
  [clojure.lang.Compiler analyzeSeq Compiler.java 7122]
  [clojure.lang.Compiler analyze Compiler.java 6806]
  [clojure.lang.Compiler eval Compiler.java 7191]
  [clojure.lang.Compiler eval Compiler.java 7149]
  [clojure.core$eval invokeStatic core.clj 3215]
  [clojure.core$eval invoke core.clj 3211]
  [badspreadsheet.spreadsheet$formulize invokeStatic spreadsheet.clj 405]
  [badspreadsheet.spreadsheet$formulize invoke spreadsheet.clj 399]
  [badspreadsheet.spreadsheet$maybe_formulize invokeStatic spreadsheet.clj 412]
  [badspreadsheet.spreadsheet$maybe_formulize invoke spreadsheet.clj 409]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invokeStatic spreadsheet.clj 418]
  [badspreadsheet.spreadsheet$reset_cell_BANG_ invoke spreadsheet.clj 416]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 643]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$handle_entity invokeStatic spreadsheet.clj 630]
  [badspreadsheet.spreadsheet$handle_entity invoke spreadsheet.clj 629]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invokeStatic spreadsheet.clj 717]
  [badspreadsheet.spreadsheet$load_entities_BANG_ invoke spreadsheet.clj 705]
  [badspreadsheet.main$_main invokeStatic main.clj 9]
  [badspreadsheet.main$_main invoke main.clj 6]
  [clojure.lang.AFn applyToHelper AFn.java 152]
  [clojure.lang.AFn applyTo AFn.java 144]
  [badspreadsheet.main main nil -1]]}

I think packaging as uberjar will cure that, and I'm just about to test that hypothesis.

simon-brooke commented 1 month ago

As anticipated, when I build an uberjar it just works (very pretty, by the way!).

I cloned the repo and built the jar file using

simon@mason:~/tmp/badspreadsheet$ clj -T:build uber

Difference in jar size as follows:

simon@mason:~/tmp/badspreadsheet$ ls -lh target/badspreadsheet-prototype.jar 
-rw-r--r-- 1 simon simon 73M May 22 08:16 target/badspreadsheet-prototype.jar
simon@mason:~/tmp/badspreadsheet$ ls -lh ~/Downloads/badspreadsheet-prototype.jar 
-rw-r--r-- 1 simon simon 61M May 22 07:54 /home/simon/Downloads/badspreadsheet-prototype.jar

So my jar file is about 12Mb bigger than yours.