Skip to content

dsyer/java-jupyter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Java Notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Prepare the kernel while Python is still active or use the `%%bash` cell magic:"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "vscode": {
     "languageId": "raw"
    }
   },
   "source": [
    "%%bash\n",
    "jbang install-kernel@jupyter-java rapaio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(Don't use the `jbang` from Nix - it [breaks](NixOS/nixpkgs#320698) the jupyter-java installer. Use sdkman, for example, `sdk install jbang 0.116.0`.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, select the Python interpreter in the top right corner of the VSCode editor - it should be `java (Rapaio/j!)`. Make sure to get the latest version of `jbang` and also (optionally) edit the `kernel.json` file in `~/.local/share/jupyter/kernels` to upgrade to version 2.1.0 and Java 22.\n",
    "\n",
    "```json\n",
    "{\n",
    "  \"argv\" : [\n",
    "    \"/home/dsyer/.sdkman/candidates/jbang/current/bin/jbang\",\n",
    "    \"--java\",\n",
    "    \"22\",\n",
    "...\n",
    "    \"io.github.padreati:rapaio-jupyter-kernel:2.1.0@fatjar\",\n",
    "    \"{connection_file}\"\n",
    "  ],\n",
    "...\n",
    "}\n",
    "```\n",
    "\n",
    "When that's done select the Java kernel from the \"Kernel\" menu and you're good to go."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hello World!\n"
     ]
    }
   ],
   "source": [
    "System.out.println(\"Hello World!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adding dependency \u001b[0m\u001b[1m\u001b[32morg.slf4j:slf4j-simple:2.0.13\u001b[0m\u001b[0m\n",
      "Solving dependencies\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found dependencies count: 2\n",
      "Add to classpath: \u001b[0m\u001b[32m/home/dsyer/.local/share/jupyter/kernels/jbang-rapaio/ivy_cache/org.slf4j/slf4j-simple/jars/slf4j-simple-2.0.13.jar\u001b[0m\u001b[0m\n",
      "Add to classpath: \u001b[0m\u001b[32m/home/dsyer/.local/share/jupyter/kernels/jbang-rapaio/ivy_cache/org.slf4j/slf4j-api/jars/slf4j-api-2.0.13.jar\u001b[0m\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "%dependency /add org.slf4j:slf4j-simple:2.0.13\n",
    "%dependency /resolve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Engine-thread-0] INFO test - Hello World!\n"
     ]
    }
   ],
   "source": [
    "import org.slf4j.LoggerFactory;\n",
    "LoggerFactory.getLogger(\"test\").info(\"Hello World!\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/test-classes to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/classes to classpath\n",
      "\u001b[0m"
     ]
    }
   ],
   "source": [
    "%classpath target/test-classes/\n",
    "%classpath target/classes/"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After running `./mvnw install` on the command line you can do this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[0m\u001b[32mFound 49 jar files.\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/micrometer-commons-1.13.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/objenesis-3.3.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/snakeyaml-2.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-test-6.1.8.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-jcl-6.1.8.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/junit-platform-commons-1.10.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-boot-starter-test-3.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-aop-6.1.8.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/accessors-smart-2.5.1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/logback-classic-1.5.6.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/apiguardian-api-1.1.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/mockito-junit-jupiter-5.11.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-core-6.1.8.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/asm-9.6.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/log4j-to-slf4j-2.23.1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/junit-jupiter-5.10.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/jakarta.annotation-api-2.1.1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-beans-6.1.8.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/android-json-0.0.20131108.vaadin1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/awaitility-4.2.1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-expression-6.1.8.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/log4j-api-2.23.1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-boot-test-3.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/junit-platform-engine-1.10.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-boot-3.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-boot-test-autoconfigure-3.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/junit-jupiter-engine-5.10.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/slf4j-api-2.0.13.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/junit-jupiter-params-5.10.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/byte-buddy-1.14.16.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-boot-starter-logging-3.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/jakarta.xml.bind-api-4.0.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/assertj-core-3.25.3.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/xmlunit-core-2.9.1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/byte-buddy-agent-1.14.16.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/hamcrest-2.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/jakarta.activation-api-2.1.3.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/json-path-2.9.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-context-6.1.8.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/junit-jupiter-api-5.10.2.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/jul-to-slf4j-2.0.13.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/jsonassert-1.5.1.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-boot-autoconfigure-3.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/opentest4j-1.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/micrometer-observation-1.13.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/logback-core-1.5.6.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/spring-boot-starter-3.3.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/mockito-core-5.11.0.jar to classpath\n",
      "\u001b[0m\u001b[0m\u001b[32mAdd /home/dsyer/dev/scratch/java-jupyter/target/lib/json-smart-2.5.1.jar to classpath\n",
      "\u001b[0m"
     ]
    }
   ],
   "source": [
    "%%jars\n",
    "target/lib"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You don't need to mess with the logging system with version 2.1.0 of the kernel."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import org.springframework.boot.logging.*;\n",
    "// Make sure Spring Boot is using the Java Logging System not Logback\n",
    "System.setProperty(LoggingSystem.SYSTEM_PROPERTY, \"org.springframework.boot.logging.java.JavaLoggingSystem\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/dsyer/dev/scratch/java-jupyter\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  .   ____          _            __ _ _\n",
      " /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\n",
      "( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\\n",
      " \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\n",
      "  '  |____| .__|_| |_|_| |_\\__, | / / / /\n",
      " =========|_|==============|___/=/_/_/_/\n",
      "\n",
      " :: Spring Boot ::                (v3.3.0)\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Engine-thread-0] INFO com.example.Application - Starting Application using Java 22.0.2 with PID 2516422 (/home/dsyer/dev/scratch/java-jupyter/target/classes started by dsyer in /home/dsyer/dev/scratch/java-jupyter)\n",
      "[Engine-thread-0] INFO com.example.Application - No active profile set, falling back to 1 default profile: \"default\"\n",
      "[Engine-thread-0] INFO com.example.Application - Started Application in 0.501 seconds (process running for 12.051)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hello, Runner!\n"
     ]
    }
   ],
   "source": [
    "com.example.Application.main(new String[0]);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%help"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "var version=\"2.0.13\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\u001b[0m\u001b[1mid:\u001b[32m1\u001b[0m \u001b[1mtype:\u001b[32mIMPORT\n",
       "\u001b[0m\u001b[0m\u001b[0m\u001b[1;30m|    import java.util.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import java.io.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import java.math.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import java.net.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import java.util.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import java.util.concurrent.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import java.util.prefs.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import java.util.regex.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    \u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[0m\u001b[1;30m|    import static org.rapaio.jupyter.kernel.global.Global.*;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[1mid:\u001b[32m2\u001b[0m \u001b[1mtype:\u001b[32mSTATEMENT\n",
       "\u001b[0m\u001b[0m\u001b[0m\u001b[1;30m|    System.out.println(\"Hello World!\")\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[1mid:\u001b[32m3\u001b[0m \u001b[1mtype:\u001b[32mIMPORT\n",
       "\u001b[0m\u001b[0m\u001b[0m\u001b[1;30m|    import org.slf4j.LoggerFactory;\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[1mid:\u001b[32m4\u001b[0m \u001b[1mtype:\u001b[32mSTATEMENT\n",
       "\u001b[0m\u001b[0m\u001b[0m\u001b[1;30m|    LoggerFactory.getLogger(\"test\").info(\"Hello World!\");\u001b[0m\u001b[0m\n",
       "\u001b[0m\u001b[1mid:\u001b[32m5\u001b[0m \u001b[1mtype:\u001b[32mVAR\n",
       "\u001b[0m\u001b[0m\u001b[0m\u001b[1;30m|    var version=\"2.0.13\";\u001b[0m\u001b[0m\n"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%jshell /list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "foo/bar"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"foo.bar\".replaceAll(\"foo\\\\.()\", \"/\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "java (Rapaio/j!)",
   "language": "java",
   "name": "jbang-rapaio"
  },
  "language_info": {
   "codemirror_mode": "java",
   "file_extension": ".jshell",
   "mimetype": "text/x-java-source",
   "name": "java",
   "nbconvert_exporter": "script",
   "pygments_lexer": "java",
   "version": "22.0.2+9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published