Fork me on GitHub
#clojure-germany
<
2021-03-17
>
schaueho08:03:13

:man-raising-hand:

ordnungswidrig10:03:01

schon 4 leute heute. Das riecht nach Rekord.

bastilla11:03:12

Moin aus Hamburg

bastilla11:03:02

Nutzt jemand von euch Leiningen?

bastilla11:03:14

Falls ja, ich hab Code in einer Lib angepasst, kompiliert und ins Repos installiert (lein clean, lein compile, lein install). Leider Null Effekt in meiner App, die die Lib nutzt. (Obwohl ich das früher schonmal erfolgreich gemacht hab.) Dann hab ich mal fehlerhaften Code eingefügt und TROTZDEM läuft "lein compile" (ohne Feedback) durch. "lein check" berichtet die Fehlerstelle. Ich kapier die Mechanik hier nicht.... Hat jemand Plan mit Leinigen?

RAMart11:03:09

Das ist kein normales Verhalten von Leiningen. Da ist was im konkreten Projekt faul.

bastilla11:03:18

die Befehle sind aber korrekt sonst? "lein clean, lein compile, lein uberjar, lein install" ?

javahippie11:03:44

Hat die lib bei dir eine Snapshot Dependency?

bastilla11:03:35

Hm, glaube nicht. Hier ist zum Spaß mal die project.clj von der Lib:

(defproject markdown-clj-werkbank "1.10.5"
  :description "Markdown parser"
  :url ""
  :license {:name "Eclipse Public License"
            :url  ""}
  :dependencies [[org.clojure/clojure "1.9.0"]
                 [clj-commons/clj-yaml "0.7.0"]]
  :clojurescript? true
  :jar-exclusions [#"\.swp|\.swo|\.DS_Store"]
  :test-selectors {:default   (complement :benchmark)
                   :benchmark :benchmark
                   :all       (constantly true)}
  :auto-clean false

   :aliases {"test-cljs" ["doo" "rhino" "test" "once"]
             "test"      ["do" "test," "test-cljs"]
             "cleantest" ["do" "clean," "test"]
             "install"   ["do" "clean," "install"]
             "deploy"    ["do" "clean," "deploy" "clojars"]}

  :source-paths ["src/clj" "src/cljc" "src/cljs"]
  :cljsbuild
  {:builds {:main
            {:source-paths ["src/cljc" "src/cljs"]
             :jar          true
             :compiler     {:output-to     "demo/js/markdown.js"
                            :optimizations :advanced
                            :pretty-print  false}}
            :dev
            {:compiler {:optimizations :whitespace
                        :pretty-print  true}}

            :test
            {:source-paths ["src/cljc" "src/cljs" "test"]
             :compiler {:output-to "target/unit-test.js"
                        :output-dir "target"
                        :main markdown.runner
                        :optimizations :whitespace}}}}
  :profiles
  {:demo
   {}
   :dev
   {:jvm-opts ["-XX:-TieredCompilation"]
    :dependencies [[criterium "0.4.4" :scope "test"]
                   [commons-lang "2.6" :scope "test"]
                   [org.clojure/clojurescript "1.10.339"]
                   [org.mozilla/rhino "1.7.10"]]
    :plugins      [[lein-cljsbuild "1.1.7"]
                   [lein-doo "0.1.10"]]}}
  :doo {:build "test"
        :paths {:rhino "lein run -m org.mozilla.javascript.tools.shell.Main"}})

javahippie12:03:02

Auf der einen Seite sagst du aber ja, dass du einen clean machst… wenn es keine Snapshot Dependency ist, dann hat Leiningen eigentlich keinen Grund, die Version deiner Dependency noch mal zu laden, die hat er ja schon. Das ist oft bei Lib Updates “on the fly” auf dem eigenen System ein Problem

bastilla12:03:54

okay. Aber ich denke doch, dass lein clean + compile doch die aktuellen Quellen (:source-paths ["src/clj" "src/cljc" "src/cljs"]) kompilieren sollte, nicht? Es ist ja nur ein Projekt auf der Platte und ich bin da im Projektverzeichnis mit bash (Terminal)

bastilla12:03:23

Das hat auch mal funktioniert. Vor Monaten.

javahippie12:03:28

Du könntest höchstens mal versuchen, die library in deinem .m2 Verzeichnis zu löschen und es dann neu zu bauen.

javahippie12:03:30

Wenn “Lib ändern, installieren, referenzieren” in deinem Workflow öfters vorkommt, würde ich aber tatsächlich zu einer SNAPSHOT dependency raten, die sind genau für den Fall gedacht

🙌 3
bastilla12:03:55

hm, ja, ich bin da jetzt so weit. Ich such das Ding mal. Danke für die Tipps und dein/euer Ohr

ordnungswidrig14:03:56

lein compile macht nur AOT für die namespaces, die to AOTen möchtest. lein check lädt (und compiliert) all namespaces.

🙌 3
bastilla14:03:43

Ah! Gute Info. Danke ordnungswidrigkeit

bastilla19:03:35

Abschließend kann ich sagen, ich hab den Kampf gegen Leiningen verloren. Das hier hat mal funktioniert, geht aber jetzt nicht mehr:

rm ~/.m2/<LIB>
lein clean
lein check
lein compile
lein jar
lein install

bastilla19:03:36

Und in meinem Projektordner dann:

lein clean
lein deps
lein run
die Änderungen in der Lib werden nicht kompiliert oder ins Lokal-Repos übertragen. Weiß der Henker, was er da mit "lein jar" für Quellen nimmt. Die unter :source-paths der Lib jedenfalls nicht, denn die hab ich ja geändert. Der Fehler sitzt natürlich immer vor dem Schirm. Aber ich gebe mich geschlagen und werde die Sourcen der Lib jetzt in mein Projekt rüberkompieren, so traurig das auch ist.

bastilla10:03:30

Zum Roman oben fehlt noch ein Epilog. Das Problem sitzt NATÜRLICH immer vor dem Schirm. Die veränderte Code-Stelle wird de facto nie ausgeführt --alle Test laufen dann natürlich ins Leere. Peinlich, peinlich!! Der Mechanismus funktioniert, die Lib wird aktualisiert. Peinlich, peinlich. Immer besser einmal drüber schlafen bei solchen Dingen. Danke für eure guten Richtungsweiser!! Na ja, und sich drüber auskotzen hilft bekanntlich auch.

javahippie11:03:30

Der Schlaf-Debugger klappt immer noch am Besten 😉

bastilla11:03:37

🙂 Das kleb ich mir über meinen Schirm.

ordnungswidrig13:03:06

Ich bin erleichter.

ordnungswidrig13:03:14

Ich bin also nicht der einzige.