ProductPromotion
Logo

Scala

made by https://0x3d.site

GitHub - xitrum-framework/scalive: Connect a Scala REPL to running JVM processes without any prior setup
Connect a Scala REPL to running JVM processes without any prior setup - xitrum-framework/scalive
Visit Site

GitHub - xitrum-framework/scalive: Connect a Scala REPL to running JVM processes without any prior setup

GitHub - xitrum-framework/scalive: Connect a Scala REPL to running JVM processes without any prior setup

Scalive

This tool allows you to connect a Scala REPL console to running Oracle (Sun) JVM processes without any prior setup at the target process.

View demo video on YouTube

Download

For Scala 2.12, download scalive-1.7.0.zip.

For Scala 2.10 and 2.11, download scalive-1.6.zip.

Extract the ZIP file, you will see:

scalive-1.7.0/
  scalive
  scalive.bat
  scalive-1.7.0.jar

  scala-library-2.12.8.jar
  scala-compiler-2.12.8.jar
  scala-reflect-2.12.8.jar

scala-library, scala-compiler, and scala-reflect of the correct version that your JVM process is using will be loaded, if they have not been loaded yet. The REPL console needs these libraries to work.

For example, your process has already loaded scala-library 2.12.8 by itself, but scala-compiler and scala-reflect haven't been loaded, Scalive will automatically load their version 2.12.8.

If none of them has been loaded, i.e. your process doesn't use Scala, Scalive will load the lastest version in the directory.

For your convenience, Scala 2.12.8 JAR files have been included above.

If your process uses a different Scala version, you need to manually download the corresponding JARs from the Internet and save them in the same directory as above.

Usage

Run the shell script scalive (*nix) or scalive.bat (Windows).

Run without argument to see the list of running JVM process IDs on your local machine:

scalive

Example output:

JVM processes:
#pid	Display name
13821	demos.Boot
17978	quickstart.Boot

To connect a Scala REPL console to a process:

scalive <process id listed above>

Just like in normal Scala REPL console, you can:

  • Use up/down arrows keys to navigate the console history
  • Use tab key for completion

How to load your own JARs to the process

Scalive only automatically loads scala-library.jar, scala-compiler.jar, scala-reflect.jar, and scalive.jar to the system classpath.

If you want to load additional classes in other JARs, first run these in the REPL console to load the JAR to the system class loader:

val cl            = ClassLoader.getSystemClassLoader.asInstanceOf[java.net.URLClassLoader]
val jarSearchDirs = Array("/dir/containing/the/jar")
val jarPrefix     = "mylib"  // Will match "mylib-xxx.jar", convenient when there's version number in the file name
scalive.Classpath.findAndAddJar(cl, jarSearchDirs, jarPrefix)

Now the trick is just quit the REPL console and connect it to the target process again. You will be able to use your classes in the JAR normally:

import mylib.foo.Bar
...

Note that :cp doesn't work.

How Scalive works

Scalive uses the Attach API to tell the target process to load an agent.

Inside the target progress, the agent creates a REPL interpreter and a TCP server to let the Scalive process connect and interact with the interpreter. The Scalive process acts as a TCP client. There are 2 TCP connections, one for REPL data and one for tab key completion data.

Similar projects:

Known issues

For simplicity and to avoid memory leak when you attach/detach many times, Scalive only supports processes with only the default system class loader, without additional class loaders. Usually they are standalone JVM processes, like Play or Xitrum in production mode.

Processes with multiple class loaders like Tomcat are currently not supported.

More Resources
to explore the angular.

mail [email protected] to add your project or resources here 🔥.

Related Articles
to learn about angular.

FAQ's
to learn more about Angular JS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory