2016-06-23 11 views
7

Java 9は、JShellというREPLをJDKディストリビューション内に導入しています。いくつかのアプリケーションを実行しているJDKのJShellに接続し、実行中のアプリケーションを参照するコマンドを実行する方法はありますか?たとえば、いくつかのメソッドを実行すると、アプリケーションコード、オブジェクトの検査などが実行されます。Java 9 REPLアプリ実行用REPL

+0

これは他のREPLでも可能ですか? –

+2

いいえ、これはJShellの目標ではありません。目標は、あなたが高速のmaneerでjava文を評価できるようにすることです。 JShellは、時間を節約するために周囲のコンテキストを提供しますが、周囲のコンテキストとしてアプリケーションを使用するように指示することはできません。 –

+1

@bigdestroyer私が言及したことのいくつかを提供するクラッシュシェルがあります。http://www.crashub.org/ –

答えて

4

JShellは標準のjavaコマンドではありません。別のコマンドです。シェルを開くと、Eval Print Loopを読み込みます。コマンドを入力すると、シェルによって読み込まれ、解析され、結果が出力されます。

変数を定義してクラスパスにクラスを追加することはできますが、少なくともこの段階ではなく、同じJVMではなく、そこからアプリケーションまたはサーバーを起動することは可能です。クラスを追加できるので、クラスをインスタンス化できますが、変数を検査するオプションはありません。しかし、JShellスコープでインスタンス化する変数(作成したオブジェクト、パブリックメソッドと変数のみにアクセスして印刷することができます)を見ることができます。

JShellには、他の可能性のための道が開くapiがあるようです。

1

いいえ、簡単にjshellではありません。

しかし、我々はjshell使用しないように、私はあなたの質問を言い換えるてみましょうが、どんなREPL Javaツール:

は、実行中のJavaアプリケーションに対するいくつかのREPLのJavaツールを接続し、その実行を参照するコマンドを実行する方法はありますアプリ。たとえば、いくつかのメソッドを実行すると、アプリケーションコード、オブジェクトの検査などが実行されます。

https://github.com/lorenzoongithub/nudge4j

その後、あなたはそれを許可しないnudge4jを見てみる必要があります正確に唯一の注意点は、Javaのための8

0

ある

ことをあなたが考えることができ、代替の選択肢はBeanShellのようなものです(ただし、BeanShellはかなり古く、おそらく廃止予定です)。アプリケーション内からBeanShellコンソールを起動すると、オブジェクトにアクセスしてメソッドを呼び出すことができます。いくつかのアイデアについては、JConsoleの例を参照してください。