Fork me on GitHub

@dimovich you can get debugging output by passing the -v and -vv arguments to boot. Ex. boot -vv cljs


I'm working with a boot repl and boot refresh (, however when I add a new function refresh doesn't add it to the repl (after I've called use). If I change the code within an existing function it works fine. Is there any fix for this


Also (use 'namespace :reload) also fails, with a "symbol already refers to symbol in namespace 'boot.user" error


Hi. I tried to find some documentation and best practices for how to publish artifacts in a local Artifactory or Nexus, but failed so far. Any other pointers than the very generic ? I'd like to push snapshots to a different repo than releases, I build in Jenkins without any plug-ins.


@ska what do you find lacking from that wiki page? is the problem solely pushing snapshots to a different repo?


@martinklepsch I'd love to see a real-world example build script with best (or known to work) practices. Do I write my own task and then call different options of the push script? How do I call this in Jenkins? How do I add my repo URL and credentials from Jenkins? Should I write something like myself but focusing on a local Artifactory instead of Clojars... Something like that. Makes sense?



(deftask push-things
  (comp (pom)
        (push :repo “your-artifactory”) ; or
        ;; (push :repo-map {:url (System/getenv “REPO_URL”)
        ;;                  :username (System/getenv “REPO_USERNAME”)
        ;;                  :password (System/getenv “REPO_PASSWORD”)})


then you’d just make Jenkins run boot push-things


Hope this makes sense, I’m not sure I fully understand the issues surrounding jenkins


@martinklepsch Yeah, I understood things so far. But how would one use :ensure-release or :ensure-snapshot there? How set a different :url depending on whether it is a release or a snapshot?


(def version "0.0.1-SNAPSHOT")

(deftask push-things
  (comp (pom)
        (push :repo (if (.endswith version "SNAPSHOT") "snapshot-channel" "release-channel")) ; or
        ;; (push :repo-map {:url (System/getenv "REPO_URL")
        ;;                  :username (System/getenv "REPO_USERNAME")
        ;;                  :password (System/getenv "REPO_PASSWORD")})
@ska it’s just a program 🙂


So, I'll re-create something like with a suitable wrapper (`deftask push`) around it, which calls the appropriate backend. It feels kinda backwards, though, that I'll test for snapshot first only to then have the push task ensuring it again.


@ska the push task does nothing else than (.endsWith v "-SNAPSHOT") so you can skip that step if you’re taking care of it yourself


@martinklepsch I know. For lack of other docs I already read the source. 🙂 Anyhow, I think, I'll figure it out eventually. Thanks for your help.


@ska let me know what you come up with and then we can improve that wiki page 🙂


It'll take a few days. Extremely busy. Maybe we can have a chat on this during euroclojure end of the week.


@ska sure, looking forward to catching up 🙂


What’s the boot equivalent of Lein’s :java-source-paths? I came across boot-java-task-example but it seems to be doing more than what I need: include Java source files that are AOT compiled.


Hey, I’m trying to have a task move files and then run another compile task, but it doesn’t seem to work because the move-task changes the fileset. If I wrap the move-task in with-pass-thru or with-post-wrap the compile task works but no files are being moved.. If I wrap it in with-pre-wrap I get an error that the task-handler must return a fileset.. What am I missing here?


I now changed mv-generated-files to:

(deftask mv-generated-files []
  (with-pre-wrap fileset
    (let [generated-dirs (->> fileset
                              (by-meta #{::generated}))
                              (map tmp-dir)
                              (into #{}))]
      (apply sync! generated-dir generated-dirs)
Which seems to work! But what is a good use-case for sift then..?