web-dev-qa-db-fra.com

Existe-t-il quelque chose comme le REPL interactif de python, mais pour Java?

Y a-t-il quelque chose comme le REPL interactif de python, mais pour Java? Pour que je puisse, par exemple, taper InetAddress.getAllByName( localHostName ) dans une fenêtre, et obtenir immédiatement des résultats, sans tout cela chose cauchemar () vide public statique?

92
Yoni Roit

modifier Depuis Java 9 il y a JShell

La réponse originale suit

Vous pouvez également utiliser Groovy Console . Il s'agit d'une console interactive où vous pouvez faire ce que vous voulez. Étant donné que Groovy inclut également des classes de la plate-forme principale Java, vous pourrez également utiliser ces classes.

Cela ressemble à ceci:

Screenshot of Groovy

63
OscarRyz

Eclipse a une fonctionnalité pour le faire, bien que ce ne soit pas une boucle. Cela s'appelle une "page d'album". Je suppose que l'analogie est censée être que vous avez un album où vous collectez de petits extraits de code.

Quoi qu'il en soit, pour le faire fonctionner, ouvrez un projet dans Eclipse (votre page Scrapbook va être associée à un projet - Eclipse aime quand les projets possèdent des choses).

Alors:

  1. Dans la fenêtre du navigateur de projet, sélectionnez un dossier qui existe quelque part dans votre projet.
  2. Sélectionnez le menu Fichier -> Nouveau -> Autre, ou appuyez sur Control-N.
  3. Sélectionnez Java -> Java Run/Debug -> Page Scrapbook).
  4. Appuyez sur "Suivant", puis donnez-lui un nom de fichier, puis appuyez sur "Terminer".

Vous avez maintenant une page d'album. Tapez du code, comme peut-être ceci:

System.out.println(System.getProperties());

Sélectionnez ensuite le texte avec la souris et appuyez sur Contrôle-U ou sélectionnez "Exécuter" dans le menu contextuel. Le code s'exécutera et la sortie apparaîtra sur la console.

Vous pouvez également saisir une expression, la sélectionner et sélectionner Afficher dans le menu contextuel. Il évaluera l'expression et imprimera son type. Par exemple, exécuter Display sur 1 + 2 imprimera (int) 3.

52
Logan

BeanShell est un petit interpréteur de source gratuit, intégrable Java avec des fonctionnalités de langage de script d'objet, écrit en Java. BeanShell exécute dynamiquement la syntaxe standard Java et l'étend avec des des fonctionnalités de script telles que des types, des commandes et des fermetures de méthodes lâches comme celles de Perl et JavaScript. Vous pouvez utiliser BeanShell de manière interactive pour Java expérimentation et débogage, ainsi que pour étendre vos applications de nouvelles façons. Scripting Java se prête à une grande variété d'applications, y compris le prototypage rapide, l'extension de script utilisateur, les moteurs de règles, la configuration, les tests, le déploiement dynamique, les systèmes embarqués et même Java = éducation.

http://www.beanshell.org/

http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax

28
bakkal

Vous pouvez utiliser les pages d'album Eclipse.

Dans Eclipse, créez une page Scrapbook. Dans votre projet, page Nouveau-> Autre-> Scrapbook.

Dans le fichier, entrez du texte, sélectionnez-le et appuyez sur ctrl-U, et c'est parti.

Pour gérer vos importations, faites un clic droit sur la page et sélectionnez Définir les importations, où vous pouvez choisir d'importer un package ou une seule classe. Ceci est persistant et est enregistré avec la page.

19
Matthew Farwell

Vieille question, mais il y a une meilleure réponse maintenant (mai 2013) - Java-REPL! Il est disponible sur github et également disponible en direct sur le site Web Java-repl pour des tests ponctuels rapides.

Si vous récupérez le code git hub et exécutez ant pour générer les artefacts, vous pouvez le rendre facile à utiliser avec un petit script comme:

#!/bin/sh
Java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar

Depuis que j'ai trouvé ce projet, je l'utilise probablement 5 fois par jour. Prendre plaisir!

19
Ron Dahlgren

Il semble que personne n'ait encore mentionné que Java (6, 7) expédie une console REPL appelée jrunscript. Elle est indépendante du langage (elle peut donc être utilisée avec Jython, JRuby, etc.). Il utilise par défaut JavaScript (Rhino) qui est également fourni par défaut, et comme les autres langages, vous pouvez accéder à tous les packages/objets disponibles sur le chemin de classe.

13
user268396

Cela fait partie d'OpenJDK 9!

Un REPL appelé JShell (développé par Oracle) a été publié dans le cadre du JDK 9.

Téléchargez simplement JDK 9 et lancez bin/jshell.

Screen shot of JShell

Ressources

11
aioobe

Comme alternative à Groovy, essayez Beanshell: http://www.beanshell.org/

Il ressemble davantage à Java et vous permet d'utiliser directement la syntaxe Java.

11
Tim Jansen

Jython est une implémentation python qui vous permet d'inspecter et d'interagir avec Java objets).

>>> from Java.net import *
>>> InetAddress.getAllByName("google.com")
array(Java.net.InetAddress,[google.com/209.85.171.100, 
                            google.com/74.125.45.100,
                            google.com/74.125.67.100])
11
speciousfool

Java-REPL par Albert Latacz fonctionne bien.

Vous pouvez l'essayer directement depuis votre navigateur ici: http://www.javarepl.com/term.html

Le code source est disponible ici, et il a un plugin Intelli-J décent.

https://github.com/albertlatacz/Java-repl

9
Matthieu Cormier

Clojure fournit un REPL que vous pouvez utiliser.

8
Ande TURNER

Scala propose également une console interactive. J'ai pu l'utiliser pour obtenir un résultat pour l'expression dans votre question en qualifiant pleinement InetAddress, comme dans:

Java.net.InetAddress.getAllByName("localhost")
7
joel.neely

La console groovy vous permet de le faire. En fait, il était destiné à essayer de tester du code groovy, mais comme groovy est un sur-ensemble de Java, il permet également des choses simples Java).

Je viens de saisir ceci dans la console:

InetAddress.getAllByName('localhost')

et appuyez sur CTRL-R, puis il est revenu:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]
7
Ole

Alors que JRuby , BeanShell , REPL de Julian Fleischer sont là REPL d'Albert Latacz semble être le dernier et actif.

Je l'ai essayé avec une définition de classe simple, ça marche bien.

$ Java -jar javarepl.jar
Welcome to JavaREPL version 56 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17)
Type in expression to evaluate.
Type :help for more options.

Java> public class Test {
    | public static void execute(String [] s) {
    |  System.out.println(54353 + s[0]);
    | }}

Java> Test.execute(new String [] {"234343"});
54353234343

Java> System.exit(0);
6
sandeepkunkunuru

Pour les personnes ayant accès à Mathematica, JLink vous permet d'accéder à Java et script avec le code Mathematica:

Needs["JLink`"]
LoadJavaClass["Java.net.InetAddress"]
InetAddress`getAllByName["localhost"]

Appuyez sur Maj + Entrée pour évaluer, et vous obtenez

{<<JavaObject[Java.net.Inet4Address>>}

Ensuite, vous pouvez utiliser la fonction Map de Mathematica pour appeler toString sur les objets retournés:

#@toString[]& /@ %

pour obtenir le résultat (ou pour utiliser la syntaxe moins obscure, Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

Si vous commencez à être sérieux avec cela, vous voudrez lire le tutoriel de Todd Gayley sur http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html .

3
jfklein
2
scravy
2
rogerdpack

Si vous connaissez déjà Groovy (ce que je suppose que vous connaissez, puisque vous avez mentionné la console Groovy), utilisez simplement groovysh ou groovyConsole, qui sont inclus dans la distribution Groovy. Si vous souhaitez importer des fichiers JAR personnalisés, vous pouvez soit écrire un fichier batch qui démarre groovysh/groovyConsole avec ceux ajoutés au chemin de classe. Vous pouvez aussi faire ça

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

depuis l'intérieur du Shell pour charger d'autres pots.

J'ai utilisé Jython il y a plusieurs années pour faire exactement ce que vous demandez. Dans le cadre de mon script de génération, j'ai généré un fichier jython.bat et .py personnalisé qui comprenait le chemin de classe complet pour le projet sur lequel je travaillais. De cette façon, quand j'ai commencé Jython, il aurait tout le code disponible, et cela ferait ressortir Spring pour me permettre de tordre les choses dans le système en direct. Vous pouvez faire la même chose avec Groovy, JRuby, BeanShell, etc.

2
Joey Gibson

Java 9 fournit le JShell.

jshell> println( "Print me!")
jshell> Print me!
1
Neha Gangwar

JPad est un bloc-notes Java avec un REPL intégré:

C:\>jpad
       _ _____          _
      | |  __ \        | |
      | | |__) |_ _  __| |
  _   | |  ___/ _` |/ _` |
 | |__| | |  | (_| | (_| |
  \____/|_|   \__,_|\__,_|



Anything you type is evaluated as Java.
The code is continuously appended until you call \clear.
Other Available Commands:
\exit - exit
\clear (n) - clear past Java statements
\history - display all past Java statements
\help - display this help

j>2+2
4
j>Math.sin(100.1)
-0.4177477
j>

Il est également intelligent pour vider des collections, des listes, des cartes, etc. et permet de les rendre sous forme de tableau ou de graphique:

enter image description here

1
Ryan Hamilton
1
harishtella

Pour Java 8, il y a Nudge4j. Voir https://github.com/lorenzoongithub/Nudge4j

Nudge4j Java repl

... et la beauté est que vous pouvez piloter votre application depuis le navigateur

1
Zo72

Il y a un simple IDE appelé DrJava qui a une console Interactions. Il fonctionne exactement comme je m'y attendais. Il suffit de charger un fichier et de commencer à interagir avec les objets qu'il contient.

1
dansalmo

Vous pouvez jeter un œil à BlueJ qui est un environnement de développement interactif Java destiné à l'enseignement OOP plutôt que complet IDE comme Eclipse ou NetBeans. C'est assez amusant de jouer avec de toute façon.

Vous pouvez le voir en action sur YouTube dans une série de tutoriels Java.

1
Trevor Tippins

La plupart des IDE ont une fenêtre appelée quelque chose comme "mode immédiat" qui vous permettra d'évaluer le code Java à la volée).

1
krosenvold

DrJava est un didacticiel IDE qui comprend un volet REPL.

Il existe également un plugin Eclipse, mais cela n'a pas fonctionné pour moi. Je pense qu'il n'a tout simplement pas été mis à jour depuis un certain temps. Donc, ce que je fais généralement, c'est de garder une fenêtre DrJava ouverte pour les questions "que se passe-t-il si je fais cela".

EclipseShell pourrait aussi être bon, mais je ne l'ai pas encore utilisé.

1
johncip

Il y a un REPL en ligne: http://www.javarepl.com/console.html

Taper plus pour atteindre la limite de caractères ...

1
Max Heiber

Jython, JIRB pour JRuby, Groovy (groovyconsole et al) et Beanshell sont toutes des options viables.

J'ai utilisé le InteractiveConsole pour Jython, cela a vraiment bien fonctionné dans l'application.

0
gpampara