-
Notifications
You must be signed in to change notification settings - Fork 0
dsyer/java-jupyter
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
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 0
No packages published