Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 620581
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T18:46:46+00:00 2026-05-13T18:46:46+00:00

Most of the top google hits for calling clojure from java are outdated and

  • 0

Most of the top google hits for “calling clojure from java” are outdated and recommend using clojure.lang.RT to compile the source code. Could you help with a clear explanation of how to call Clojure from Java assuming you have already built a jar from the Clojure project and included it in the classpath?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T18:46:46+00:00Added an answer on May 13, 2026 at 6:46 pm

    Update: Since this answer was posted, some of the tools available have changed. After the original answer, there is an update including information on how to build the example with current tools.

    It isn’t quite as simple as compiling to a jar and calling the internal methods. There do seem to be a few tricks to make it all work though. Here’s an example of a simple Clojure file that can be compiled to a jar:

    (ns com.domain.tiny
      (:gen-class
        :name com.domain.tiny
        :methods [#^{:static true} [binomial [int int] double]]))
    
    (defn binomial
      "Calculate the binomial coefficient."
      [n k]
      (let [a (inc n)]
        (loop [b 1
               c 1]
          (if (> b k)
            c
            (recur (inc b) (* (/ (- a b) b) c))))))
    
    (defn -binomial
      "A Java-callable wrapper around the 'binomial' function."
      [n k]
      (binomial n k))
    
    (defn -main []
      (println (str "(binomial 5 3): " (binomial 5 3)))
      (println (str "(binomial 10042 111): " (binomial 10042 111)))
    )
    

    If you run it, you should see something like:

    (binomial 5 3): 10
    (binomial 10042 111): 49068389575068144946633777...
    

    And here’s a Java program that calls the -binomial function in the tiny.jar.

    import com.domain.tiny;
    
    public class Main {
    
        public static void main(String[] args) {
            System.out.println("(binomial 5 3): " + tiny.binomial(5, 3));
            System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111));
        }
    }
    

    It’s output is:

    (binomial 5 3): 10.0
    (binomial 10042, 111): 4.9068389575068143E263
    

    The first piece of magic is using the :methods keyword in the gen-class statement. That seems to be required to let you access the Clojure function something like static methods in Java.

    The second thing is to create a wrapper function that can be called by Java. Notice that the second version of -binomial has a dash in front of it.

    And of course the Clojure jar itself must be on the class path. This example used the Clojure-1.1.0 jar.

    Update: This answer has been re-tested using the following tools:

    • Clojure 1.5.1
    • Leiningen 2.1.3
    • JDK 1.7.0 Update 25

    The Clojure Part

    First create a project and associated directory structure using Leiningen:

    C:\projects>lein new com.domain.tiny
    

    Now, change to the project directory.

    C:\projects>cd com.domain.tiny
    

    In the project directory, open the project.clj file and edit it such that the contents are as shown below.

    (defproject com.domain.tiny "0.1.0-SNAPSHOT"
      :description "An example of stand alone Clojure-Java interop"
      :url "http://clarkonium.net/2013/06/java-clojure-interop-an-update/"
      :license {:name "Eclipse Public License"
      :url "http://www.eclipse.org/legal/epl-v10.html"}
      :dependencies [[org.clojure/clojure "1.5.1"]]
      :aot :all
      :main com.domain.tiny)
    

    Now, make sure all of the dependencies (Clojure) are available.

    C:\projects\com.domain.tiny>lein deps
    

    You may see a message about downloading the Clojure jar at this point.

    Now edit the Clojure file C:\projects\com.domain.tiny\src\com\domain\tiny.clj such that it contains the Clojure program shown in the original answer. (This file was created when Leiningen created the project.)

    Much of the magic here is in the namespace declaration. The :gen-class tells the system to create a class named com.domain.tiny with a single static method called binomial, a function taking two integer arguments and returning a double. There are two similarly named functions binomial, a traditional Clojure function, and -binomial and wrapper accessible from Java. Note the hyphen in the function name -binomial. The default prefix is a hyphen, but it can be changed to something else if desired. The -main function just makes a couple of calls to the binomial function to assure that we are getting the correct results. To do that, compile the class and run the program.

    C:\projects\com.domain.tiny>lein run
    

    You should see output shown in the original answer.

    Now package it up in a jar and put it someplace convenient. Copy the Clojure jar there too.

    C:\projects\com.domain.tiny>lein jar
    Created C:\projects\com.domain.tiny\target\com.domain.tiny-0.1.0-SNAPSHOT.jar
    C:\projects\com.domain.tiny>mkdir \target\lib
    
    C:\projects\com.domain.tiny>copy target\com.domain.tiny-0.1.0-SNAPSHOT.jar target\lib\
            1 file(s) copied.
    
    C:\projects\com.domain.tiny>copy "C:<path to clojure jar>\clojure-1.5.1.jar" target\lib\
            1 file(s) copied.
    

    The Java Part

    Leiningen has a built-in task, lein-javac, that should be able to help with the Java compilation. Unfortunately, it seems to be broken in version 2.1.3. It can’t find the installed JDK and it can’t find the Maven repository. The paths to both have embedded spaces on my system. I assume that is the problem. Any Java IDE could handle the compilation and packaging too. But for this post, we’re going old school and doing it at the command line.

    First create the file Main.java with the contents shown in the original answer.

    To compile java part

    javac -g -cp target\com.domain.tiny-0.1.0-SNAPSHOT.jar -d target\src\com\domain\Main.java
    

    Now create a file with some meta-information to add to the jar we want to build. In Manifest.txt, add the following text

    Class-Path: lib\com.domain.tiny-0.1.0-SNAPSHOT.jar lib\clojure-1.5.1.jar
    Main-Class: Main
    

    Now package it all up into one big jar file, including our Clojure program and the Clojure jar.

    C:\projects\com.domain.tiny\target>jar cfm Interop.jar Manifest.txt Main.class lib\com.domain.tiny-0.1.0-SNAPSHOT.jar lib\clojure-1.5.1.jar
    

    To run the program:

    C:\projects\com.domain.tiny\target>java -jar Interop.jar
    (binomial 5 3): 10.0
    (binomial 10042, 111): 4.9068389575068143E263
    

    The output is essentially identical to that produced by Clojure alone, but the result has been converted to a Java double.

    As mentioned, a Java IDE will probably take care of the messy compilation arguments and the packaging.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 304k
  • Answers 304k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer In development, it is easy and fast to incrementally "improve"… May 13, 2026 at 8:45 pm
  • Editorial Team
    Editorial Team added an answer A search of comp.lang.ada for recent discussions about priorities has… May 13, 2026 at 8:45 pm
  • Editorial Team
    Editorial Team added an answer Indeed, the NoClassDefFoundError means that the definition of the Jersey… May 13, 2026 at 8:45 pm

Related Questions

As a self-taught computer programmer, I'm often at a loss to estimate the O()
Back when I was learning HTML, I loved how easy it to build pages
The situation: I want to play around with IRC bots as general communications interfaces
In Hidden Features of Java the top answer mentions Double Brace Initialization , with
Google Images is the best example. Once you follow an image, a frame remains

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.