Hallöle.
✌️
tach
:man-raising-hand:
schon 4 leute heute. Das riecht nach Rekord.
Moin aus Hamburg
Nutzt jemand von euch Leiningen?
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?
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.
Der Schlaf-Debugger klappt immer noch am Besten 😉
🙂 Das kleb ich mir über meinen Schirm.
Ich bin erleichter.
Ich bin also nicht der einzige.
Das ist kein normales Verhalten von Leiningen. Da ist was im konkreten Projekt faul.
die Befehle sind aber korrekt sonst? "lein clean, lein compile, lein uberjar, lein install" ?
Hat die lib bei dir eine Snapshot Dependency?
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 "<https://github.com/yogthos/markdown-clj>"
:license {:name "Eclipse Public License"
:url "<http://www.eclipse.org/legal/epl-v10.html>"}
: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"}})
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
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)
Das hat auch mal funktioniert. Vor Monaten.
Du könntest höchstens mal versuchen, die library in deinem .m2 Verzeichnis zu löschen und es dann neu zu bauen.
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
hm, ja, ich bin da jetzt so weit. Ich such das Ding mal. Danke für die Tipps und dein/euer Ohr
lein compile
macht nur AOT für die namespaces, die to AOTen möchtest. lein check
lädt (und compiliert) all namespaces.
Ah! Gute Info. Danke ordnungswidrigkeit
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
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.