After a new evaluation. I found ```org #+BEGIN_SRC clojure (ns user (:require '[incanter.core :as mm])) #+END_SRC #+RESULTS: : class clojure.lang.Compiler$CompilerExceptionclass clojure.lang.Compiler$CompilerExceptionCompilerException java.lang.Exception: Found lib name 'incanter.core' containing period with prefix 'quote'. lib names inside prefix lists must not contain periods, compiling:(/home/stardiviner/Code/learning/Emacs/Org-mode/ob-clojure.org:1 :1) #+BEGIN_SRC clojure :session :results output (print "hi") (def kkkk "hello") #+END_SRC #+RESULTS: : hi ``` Both two src blocks works. Because the first src block Clojure namespace `(ns user ..)` is same with CIDER REPL default namespace `user`. So it works. But when I tried add header argument `:eval no` on first src block like this: ```org #+BEGIN_SRC clojure :session :eval no (ns user.kk (:require '[incanter.core :as mm])) #+END_SRC #+RESULTS: #+BEGIN_SRC clojure :session :results output (print "hi") (def kkkk "hello") #+END_SRC #+RESULTS: ``` The second src block failed again. So I think `ob-clojure` will try to evaluate the first src block even I added header argument `:eval no`. So `ob-clojure.el` does not respect header argument `:eval no`. But I think might because `:eval no` is not work for this purpose. I did can't evaluate by pressing `[C-c C-c]` on first block. [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 8:57 PM, numbchild@gmail.com wrote: > 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 >> > >