2016-06-23 23 views
7

Java 9 wprowadza REPL o nazwie JShell w dystrybucji JDK. Czy istnieje sposób łączenia się z JShell JDK, który uruchamia niektóre aplikacje i wykonuje polecenia odwołujące się do tej działającej aplikacji. Na przykład wykonywanie niektórych metod z kodu aplikacji, inspekcja obiektów itp ..?Java 9 REPL dla uruchomionej aplikacji

+0

Czy można to zrobić w innych REPL-ach? –

+2

Nie, to nie jest celem JShell. Celem jest umożliwienie szybkiego oceniania instrukcji java. JShell zapewni kontekst otaczający, który pomoże Ci zaoszczędzić czas, nie możesz powiedzieć mu, aby wziął aplikację jako twój kontekst. –

+1

@bigdestroyer jest powłoka awaryjna, która zapewnia niektóre z tego, o czym wspomniałem http://www.crashub.org/ –

Odpowiedz

4

JShell nie jest standardową komendą java, to kolejne polecenie. Po otwarciu powłoki "idzie" w Read Eval Print Loop. Po wpisaniu polecenia jest ono odczytywane i analizowane przez powłokę, oceniane, a wynik jest drukowany.

Możesz definiować zmienne i dodawać klasy do ścieżki klasy, ale wydaje mi się, że nie jest możliwe uruchomienie aplikacji lub serwera, przynajmniej na tym etapie, a nie w tej samej maszynie JVM. Ponieważ możesz dodawać klasy, możesz je utworzyć, ale nie masz możliwości sprawdzenia ich zmiennych. Możesz jednak zobaczyć zmienne, które tworzysz w swoim zasięgu JShell (jakie obiekty stworzyłeś, możesz uzyskać dostęp i drukować tylko ich publiczne metody i zmienne).

Wygląda na to, że JShell będzie miał api, co otwiera drogę do innych możliwości.

1

Nie, nie łatwo z jshell.

ale pozwól mi przeformułować swoje pytanie, tak że nie używamy jshell ale cokolwiek narzędzie REPL Java:

Czy istnieje jakiś sposób, aby połączyć niektóre narzędzia REPL java przeciwko aplikacja Java i wykonywanie poleceń przedstawieniu że bieganie aplikacja. Na przykład wykonywanie niektórych metod z kodu aplikacji, inspekcja obiektów itp ..?

https://github.com/lorenzoongithub/nudge4j

to należy spojrzeć na to zezwala nudge4j dokładnie to

jedynym zastrzeżeniem jest dla java 8.

0

Alternatywna opcja, że ​​można rozważyć, jest coś takiego jak BeanShell (chociaż BeanShell jest dość stary i prawdopodobnie przestarzały). Możesz uruchomić konsolę BeanShell z poziomu aplikacji, która umożliwi ci dostęp do twoich obiektów i metod połączeń na nich. Zobacz przykład JConsole dla niektórych pomysłów.