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
Odpowiedz
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.
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.
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.
Czy można to zrobić w innych REPL-ach? –
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. –
@bigdestroyer jest powłoka awaryjna, która zapewnia niektóre z tego, o czym wspomniałem http://www.crashub.org/ –