BeanShell ist eine dynamische Skriptsprache für die Java-VM von Pat Niemeyer. Sie erlaubt es, nahezu unveränderten Java-Code durch einen Interpreter auszuführen. Wie bei Python oder Perl wird der Code dabei vorher in einen Abstract Syntax Tree (AST) übersetzt. BeanShell wird gerne als Sprache für Makros eingesetzt, beispielsweise im Texteditor jEdit, in Apache JMeter und in Apache ANT.
Neben klassischer Java-Syntax bietet BeanShell einige der für Skriptsprachen typischen Vereinfachungen wie dynamische Typisierung statt statischer Typisierung, globale Variablen und Funktionen, (eingeschränkten) reflexiven Zugriff auf das Programm selbst und Ähnliches. Die Syntax ist allerdings stark an die des originalen Java angelehnt, was es für Java-Programmierer leicht macht, zwischen beiden Sprachen zu wechseln oder zu übersetzen. Da BeanShell in der Lage ist, von bestehenden Java-Klassen zu erben oder beliebige Schnittstellen zu implementieren, lässt sie sich gut zusammen mit bestehenden Frameworks und Anwendungen einsetzen.
BeanShell erweitert die Java-Syntax besonders in folgenden zwei Punkten, wodurch eine höhere Produktivität erreicht werden soll:
this
zum Objekt erheben.Der Code wurde an die Apache Foundation übertragen, erreichte dort aber nicht den Projekt-Status.
Nach Version 2.0b6 vom 5. Februar 2016 wurde am 22. Dezember 2020 Version 2.1.0 veröffentlicht. Die Sprache ist jedoch stabil. Bisher unterstützt BeanShell nur wenige der syntaktischen Neuerungen in Java 1.5.
Eine Abspaltung mit dem Namen BeanShell2 erfolgte im Mai 2007 auf Google Code. Das Projekt hat eine Reihe von Korrekturen und Verbesserungen an BeanShell veröffentlicht. Es gibt Bestrebungen, die beiden Versionen wieder zusammenzuführen.
Alternativen zu BeanShell sind Groovy, Jacl für Tcl, Rhino für JavaScript, Jython für Python und JRuby für Ruby, wobei Groovy, Jython und JRuby, im Unterschied zu BeanShell, sowohl General-Purpose-Sprachen, als auch Skriptsprachen sind. Die Groovy-Syntax ist dabei, wie BeanShell, Java-kompatibel, bietet darüber hinaus aber Erweiterungen, wie String Interpolation oder DSL-Unterstützung.