Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Rhino is an open-source implementation of JavaScript written entirely in Java

License

NotificationsYou must be signed in to change notification settings

mozilla/rhino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rhino (234581759)

Rhino is an implementation of JavaScript in Java.

License

Rhino is licensed under theMPL 2.0.

Releases

The current release isRhino 1.7.15. Please see theRelease Notes.

Releases
Rhino 1.7.15May 3, 2024
Rhino 1.7.14January 6, 2022
Rhino 1.7.13September 2, 2020
Rhino 1.7.12January 13, 2020
Rhino 1.7.11May 30, 2019
Rhino 1.7.10April 9, 2018
Rhino 1.7.9March 15, 2018
Rhino 1.7.8January 22, 2018
Rhino 1.7.7.2August 24, 2017
Rhino 1.7.7.1February 2, 2016
Rhino 1.7.7June 17, 2015
Rhino 1.7.6April 15, 2015
Rhino 1.7R5January 29, 2015

Compatibility table which shows which advanced JavaScriptfeatures from ES6, and ES2016+ are implemented in Rhino.

GitHub Action Status

Documentation

Information for script builders and embedders:

Archived

JavaDoc for all the APIs:

https://javadoc.io/doc/org.mozilla/rhino

Code Structure

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 and one auxiliary module for Kotlin developers:

  • rhino: The primary codebase necessary and sufficient to run JavaScript code. Required by everything that uses Rhino. In releasesafter 1.7.15, this module does not contain the "tools" or the XML implementation.

  • rhino-tools: Contains the shell, debugger, and the "Global" object, which many tests and other Rhino-based tools use. Note that adding Global gives Rhino the ability to print to stdout, open files, and do other things that may be considered dangerous in a sensitive environment, so it only makes sense to include if you will use it.

  • rhino-xml: Adds the implementation of the E4X XML standard. Only required if you are using that.

  • rhino-engine: Adds the Rhino implementation of the standard JavaScriptEngine interface. Some projects use this to be able to switch between script execution engines, but for anything even moderately complex it is almost always easier and always more flexible to use Rhino's API directly.

  • rhino-all: This creates an "all-in-one" JAR that includesrhino-runtime,rhino-tools, andrhino-xml. This is what's used if you want to run Rhino using "java jar".

  • rhino-kotlin: Enhanced support for code written in Kotlin,see the details.

The release contains the following other modules, which are used while building andtesting but which are not published to Maven Central:

  • tests: The tests that depend on all of Rhino and also the external tests, including the Mozilla legacy test scripts and the test262 tests.
  • benchmarks: Runs benchmarks using JMH.
  • examples: Surprisingly, this contains example code.

Building

Requirements

Rhino requires Java 17 or higher to build. The "spotless" tool, which enforces code formatting, will notrun on older Java versions and you will receive a warning. If in doubt, Java 21 works great.

Rhino runs on Java 11 and higher. The build tools use the "--release" flag to ensure that onlyfeatures from Java 11 are used in the product.

The CI tools run the Rhino tests on Java 11, 17, and 21. Regardless of what version of Java you arebuilding with, you can test on another Java version using the RHINO_TEST_JAVA_VERSION environment variable.

How to Build

For normal development, you can build the code, run the static checks, and run all the tests like this:

git submodule initgit 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:buildjava -jar rhino-all/build/libs/rhino-all-1.7.16-SNAPSHOT.jar

You can also run the benchmarks:

./gradlew jmh

Testing on other Java Versions

It is a good idea to test major changes on Java 11 before assuming that they will pass the CItests. To do this, set the environment variable RHINO_TEST_JAVA_VERSION to the version that youwant to test. For example:

RHINO_TEST_JAVA_VERSION=11 ./gradlew check

This will only work if Gradle can find a JDK of the appropriate version. You can troubleshootthis using the command:

./gradlew -q javaToolchains

Not all installers seem to put JDKs in the places where Gradle can find them. When in doubt,installatioons fromAdoptium seem to work on most platforms.

Code Coverage

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 byrunning

./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

Releasing and publishing new version

  1. Ensure all tests are passing
  2. Remove-SNAPSHOT from version ingradle.properties in project root folder
  3. Create filegradle.properties in$HOME/.gradle folder with following properties. Populate them with maven repo credentials and repo location.
mavenUser=mavenPassword=mavenSnapshotRepo=mavenReleaseRepo=
  1. RunGradle task to publish artifacts to Maven Central.
./gradlew publish
  1. Increase version and add-SNAPSHOT to it ingradle.properties in project root folder.
  2. Pushgradle.properties toGitHub

Java 16 and later

If you are using a modular JDK that disallows the reflective access tonon-public fields (16 and later), youmay need to configure the JVM with the--add-opensoption 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 or test Rhino -- it may be necessary when embedding itdepending on what your project does.

Issues

Most issues are managed on GitHub:

https://github.com/mozilla/rhino/issues

Contributing PRs

To submit a new PR, please use the following process:

  • Ensure that your entire build passes "./gradlew check". This will includecode formatting and style checks and runs the tests.
  • Please write tests for what you fixed, unless you can show us that existingtests cover the changes. Use existing tests, such as those in"testsrc/org/mozilla/javascript/tests", as a guide.
  • If you fixed ECMAScript spec compatibility, take a look at test262.properties and seeif you can un-disable some tests.
  • Push your change to GitHub and open a pull request.
  • Please be patient as Rhino is only maintained by volunteers and we may needsome time to get back to you.
  • Thank you for contributing!

Updating Test262 tests

If you are adding new capabilities to Rhino, you may be making more test262 tests pass, which isa good thing. Pleasesee the instructions on how to update our test262 configuration.

Because of differences between Java and JavaScript, when testing on newer Java versions, manyUnicode-related test262 tests appear to pass, but they will fail on Java 11. Please ignore these!

Code Formatting

Code formatting was introduced in 2021. The "spotless" plugin will fail yourbuild 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 makehundreds of lines of changes to, please try to put the reformatting changesalone into a single Git commit so that we can separate reformatting changesfrom more substantive changes.

Currently, you must be building on Java 17 or higher for Spotless to run.

More Help

GitHub is the best place to go with questions. For example, we use "GitHub discussions":

https://github.com/mozilla/rhino/discussions


[8]ページ先頭

©2009-2025 Movatter.jp