Rhino is an open-source implementation of JavaScript written entirely in Java
OTHER License
Rhino is an implementation of JavaScript in Java.
Rhino is licensed under the MPL 2.0.
The current release is Rhino 1.7.15. Please see the Release Notes.
Compatibility table which shows which advanced JavaScript features from ES6, and ES2016+ are implemented in Rhino.
Information for script builders and embedders:
JavaDoc for all the APIs:
https://javadoc.io/doc/org.mozilla/rhino
Rhino 1.7.15 and before were primarily used in a single JAR called "rhino.jar".
Newer releases now organize the code using Java modules. There are four primary modules:
The release contains the following other modules, which are used while building and testing but which are not published to Maven Central:
Rhino requires Java 11 to build. It will (currently) build with Java versions up to at least Java 21. However, not all tools work with Java 21, such as "spotless", so Java 11 is required for regular developers.
For normal development, you can build the code, run the static checks, and run all the tests like this:
git submodule init
git submodule update
./gradlew check
To just run the Rhino shell, you can do this from the top-level directory:
./gradlew run -q --console=plain
Alternately, you can build an all-in-one JAR and run that:
./gradlew :rhino-all:build
java -jar rhino-all/build/libs/rhino-all-1.7.16-SNAPSHOT.jar
You can also run the benchmarks:
./gradlew jmh
The "Jacoco" coverage is enabled by default for the main published modules as well as the special "tests" module. Coverage is generated for each of the main projects separately and available by running
./gradlew jacocoTestReport
To see an aggregated coverage report for everything, which is probably what you want, run
./gradlew testCodeCoverageReport
The result is in: ./tests/build/reports/jacoco/testCodeCoverageReport/html
-SNAPSHOT
from version in gradle.properties
in project root foldergradle.properties
in $HOME/.gradle
folder with following properties. Populate them with maven repo credentials and repo location.mavenUser=
mavenPassword=
mavenSnapshotRepo=
mavenReleaseRepo=
Gradle
task to publish artifacts to Maven Central../gradlew publish
-SNAPSHOT
to it in gradle.properties
in project root folder.gradle.properties
to GitHub
If you are using a modular JDK that disallows the reflective access to
non-public fields (16 and later), you may need to configure the JVM with the
--add-opens
option to authorize the packages that your scripts shall use, for example:
--add-opens java.desktop/javax.swing.table=ALL-UNNAMED
This is not necessary just to build Rhino -- it may be necessary when embedding it depending on what your project does.
Most issues are managed on GitHub:
https://github.com/mozilla/rhino/issues
To submit a new PR, please use the following process:
Code formatting was introduced in 2021. The "spotless" plugin will fail your build if you have changed any files that have not yet been reformatted. Please use "spotlessApply" to reformat the necessary files.
If you are the first person to touch a big file that spotless wants to make hundreds of lines of changes to, please try to put the reformatting changes alone into a single Git commit so that we can separate reformatting changes from more substantive changes.
Currently, you must be building on Java 11 for Spotless to run. We recommend that you have that ready. (We have not been able to figure out a version of Spotless and the Google formatting plugin that it uses that works on many Java versions.)
GitHub is the best place to go with questions. For example, we use "GitHub discussions":