I did configure `ob-clojure` with the following settings: ```elisp (require 'ob-clojure) ;; use CIDER as the Clojure execution backend (setq org-babel-clojure-backend 'cider) ;; Useful keybindings when using Clojure from Org ;; (org-defkey org-mode-map (kbd "C-x C-e") 'cider-eval-last-sexp) ;; (org-defkey org-mode-map (kbd "C-c C-d") 'cider-doc) ;; No timeout when executing calls on Cider via nrepl ;; (setq org-babel-clojure-sync-nrepl-timeout nil) ;; let `ob-clojure' babel src blocks allow evaluation. (add-to-list 'org-babel-default-header-args:clojure '(:eval . "yes")) (add-to-list 'org-babel-default-header-args:clojure '(:results . "output")) ;; (add-to-list 'org-babel-default-header-args:clojure ;; '(:show-process . t)) ``` I start CIDER REPL session with `cider-jack-in` without project in Emacs. I changed namespace to `user` in src blocks like this: ```org #+BEGIN_SRC clojure (ns user (:require '[incanter.core :as kk])) #+END_SRC #+RESULTS: #+BEGIN_SRC clojure :session :results output (print "hi") (def kkkk "hello") #+END_SRC #+RESULTS: : hi ``` Then it works. Seems you're right, might my first src block can't work correctly. That caused second src block evaluation failed. But I require `incanter` works, I have `incanter` in Leiningen dependencies. ```clojure (require '[incanter.core :as kk]) ``` But include `incanter` in namespace failed: ```clojure (ns user (:require '[incanter.core :as kk])) ``` with the following error. ``` Show: Clojure Java REPL Tooling Duplicates All (29 frames hidden) 2. Unhandled clojure.lang.Compiler$CompilerException Error compiling Code/learning/Emacs/Org-mode/ob-clojure.org at (1:1) core.clj: 5771 clojure.core/throw-if core.clj: 5835 clojure.core/load-lib core.clj: 5832 clojure.core/load-lib RestFn.java: 142 clojure.lang.RestFn/applyTo core.clj: 659 clojure.core/apply core.clj: 5893 clojure.core/load-libs core.clj: 5873 clojure.core/load-libs RestFn.java: 137 clojure.lang.RestFn/applyTo core.clj: 659 clojure.core/apply core.clj: 5911 clojure.core/require core.clj: 5911 clojure.core/require RestFn.java: 408 clojure.lang.RestFn/invoke REPL: 1 user/eval46259/loading--auto-- REPL: 1 user/eval46259 REPL: 1 user/eval46259 Compiler.java: 6977 clojure.lang.Compiler/eval Compiler.java: 6966 clojure.lang.Compiler/eval Compiler.java: 6940 clojure.lang.Compiler/eval core.clj: 3187 clojure.core/eval core.clj: 3183 clojure.core/eval main.clj: 242 clojure.main/repl/read-eval-print/fn main.clj: 242 clojure.main/repl/read-eval-print main.clj: 260 clojure.main/repl/fn main.clj: 260 clojure.main/repl main.clj: 176 clojure.main/repl RestFn.java: 1523 clojure.lang.RestFn/invoke interruptible_eval.clj: 87 clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn AFn.java: 152 clojure.lang.AFn/applyToHelper AFn.java: 144 clojure.lang.AFn/applyTo core.clj: 657 clojure.core/apply core.clj: 1963 clojure.core/with-bindings* core.clj: 1963 clojure.core/with-bindings* RestFn.java: 425 clojure.lang.RestFn/invoke interruptible_eval.clj: 85 clojure.tools.nrepl.middleware.interruptible-eval/evaluate interruptible_eval.clj: 55 clojure.tools.nrepl.middleware.interruptible-eval/evaluate interruptible_eval.clj: 222 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn interruptible_eval.clj: 190 clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn AFn.java: 22 clojure.lang.AFn/run ThreadPoolExecutor.java: 1142 java.util.concurrent.ThreadPoolExecutor/runWorker ThreadPoolExecutor.java: 617 java.util.concurrent.ThreadPoolExecutor$Worker/run Thread.java: 745 java.lang.Thread/run 1. Caused by java.lang.Exception Found lib name 'incanter.stats' containing period with prefix 'quote'. lib names inside prefix lists must not contain periods core.clj: 659 clojure.core/apply core.clj: 5893 clojure.core/load-libs core.clj: 5873 clojure.core/load-libs RestFn.java: 137 clojure.lang.RestFn/applyTo core.clj: 659 clojure.core/apply core.clj: 5911 clojure.core/require core.clj: 5911 clojure.core/require RestFn.java: 408 clojure.lang.RestFn/invoke REPL: 1 user/eval46259/loading--auto-- REPL: 1 user/eval46259 REPL: 1 user/eval46259 Compiler.java: 6977 clojure.lang.Compiler/eval Compiler.java: 6966 clojure.lang.Compiler/eval Compiler.java: 6940 clojure.lang.Compiler/eval core.clj: 3187 clojure.core/eval core.clj: 3183 clojure.core/eval main.clj: 242 clojure.main/repl/read-eval-print/fn main.clj: 242 clojure.main/repl/read-eval-print main.clj: 260 clojure.main/repl/fn main.clj: 260 clojure.main/repl main.clj: 176 clojure.main/repl RestFn.java: 1523 clojure.lang.RestFn/invoke interruptible_eval.clj: 87 clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn AFn.java: 152 clojure.lang.AFn/applyToHelper AFn.java: 144 clojure.lang.AFn/applyTo core.clj: 657 clojure.core/apply core.clj: 1963 clojure.core/with-bindings* core.clj: 1963 clojure.core/with-bindings* RestFn.java: 425 clojure.lang.RestFn/invoke interruptible_eval.clj: 85 clojure.tools.nrepl.middleware.interruptible-eval/evaluate interruptible_eval.clj: 55 clojure.tools.nrepl.middleware.interruptible-eval/evaluate interruptible_eval.clj: 222 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn interruptible_eval.clj: 190 clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn AFn.java: 22 clojure.lang.AFn/run ThreadPoolExecutor.java: 1142 java.util.concurrent.ThreadPoolExecutor/runWorker ThreadPoolExecutor.java: 617 java.util.concurrent.ThreadPoolExecutor$Worker/run Thread.java: 745 java.lang.Thread/run ``` [stardiviner] GPG key ID: 47C32433 IRC(freeenode): stardiviner Twitter: @numbchild Key fingerprint = 9BAA 92BC CDDD B9EF 3B36 CB99 B8C4 B8E5 47C3 2433 Blog: http://stardiviner.github.io/ On Sat, Jun 17, 2017 at 9:46 AM, Tim Cross wrote: > > My guess is that cider is not finding the incanter package in the > classpath when the first block attempts to evaluate. Another issue is > that your not using any session options, so your two blocks will be > evaluated in separate environments - not a real problem with your > current example, but will be an issue if you expect to access incanter > functions from separate babel blocks. > > There are a number of working parts which all need to be lined up > correctly before babel clojure support will work correctly. Getting > things to work when your just using core clojure functions is fairly > trivial, but getting it to work when you have to pull in other > dependencies can be a little tricky. > > You might find this article useful to get started > > http://fgiasson.com/blog/index.php/2016/06/21/optimal- > emacs-settings-for-org-mode-for-literate-programming/ > > I also notice you have not set the org-babel-clojure-backend, which you > need to do. My recommendation would be to do the following > > 1. Create a leinegen project to experiment with i.e. > lein new app my-kk > > 2. Make sure you can edit and evaluate clojure just using clojure-mode > and cider in emacs > > 3. Add the incanter package to your project.clj dependencies key > > 4. Modify core.clj (using clojure-mode) to include the code in your > clojure blocks and run with cider to make sure they work as expected. > > 5. Create the org file you want to experiment with in the root of your > project. This should ensure that when you try to evaluate clojure > blocks, the cider backend will be loaded with the dependencies in the > project.clj file. > > 6. Copy the code in your core.clj file into ONE babel src block and see > if you can get it to evaluate correctly. Experiment with the block > configuration options like :output etc. > > 7. Break the code up into different blocks and experiment with block > options, especially session options. > > Once you get to that point, you should be across the various moving > parts with sufficient understanding to then look at how you can tweak > things to get exactly the behaviour and workflow you want. > > HTH > > Tim > > numbchild@gmail.com writes: > > > When Org-mode buffer like this: > > > > #+BEGIN_SRC clojure > > (ns my.kk > > (:require '[incanter.core :as kk])) > > #+END_SRC > > > > #+BEGIN_SRC clojure > > (print "hi") > > (def kkkk "hello") > > #+END_SRC > > > > #+RESULTS: > > > > When I have `(ns ..)` namespace clojure code in buffer, the second > `(print > > ..)` clojure result nothing. But when I remove the first src block, the > > `(print ..)` clojure src block works fine. > > > > I'm using Org-mode version from `master` with `use-package` like this: > > > > (use-package org > > :load-path "~/Code/Emacs/org-mode/lisp/" > > :pin manual > > :mode (("\\.org$" . org-mode)) > > :config > > (use-package org-plus-contrib > > :load-path "~/Code/Emacs/org-mode/contrib/lisp/" > > :pin manual) > > ) > > > > > > [stardiviner] GPG key ID: 47C32433 > > IRC(freeenode): stardiviner Twitter: @numbchild > > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36 CB99 B8C4 B8E5 47C3 2433 > > Blog: http://stardiviner.github.io/ > > > -- > Tim Cross >