1. 序章

CRaSHは、JVMにデプロイされ、JVMとの対話を支援する再利用可能なシェルです。

このチュートリアルでは、CRaSHをスタンドアロンアプリケーションとしてインストールする方法を説明します。 また、Spring Webアプリケーションに埋め込み、いくつかのカスタムコマンドを作成します。

2. スタンドアロンインストール

CRaSHの公式Webサイトからディストリビューションをダウンロードして、スタンドアロンアプリケーションとしてCRaSHをインストールしましょう。

CRaSHディレクトリ構造には、3つの重要なディレクトリ cmd、bin、、および conf:が含まれています。

 

bin ディレクトリには、CRaSHを開始するためのスタンドアロンCLIスクリプトが含まれています。

cmd ディレクトリには、すぐに使用できるすべてのコマンドが含まれています。 また、ここにカスタムコマンドを配置できます。 これについては、この記事の後半のセクションで説明します。

CLIを開始するには、 bin に移動し、 crack.batまたはcrash.sh:のいずれかを使用してスタンドアロンインスタンスを起動します。

3. SpringWebアプリケーションへのCRaSHの埋め込み

CRaSHをSpringWebアプリケーションに埋め込みましょう。 まず、いくつかの依存関係が必要になります。

<dependency>
    <groupId>org.crashub</groupId>
    <artifactId>crash.embed.spring</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>org.crashub</groupId>
    <artifactId>crash.cli</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>org.crashub</groupId>
    <artifactId>crash.connectors.telnet</artifactId>
    <version>1.3.2</version>
</dependency>

MavenCentralで最新バージョンを確認できます。

CRaSHはJavaとGroovyの両方をサポートしているため、Groovyスクリプトを機能させるにはGroovyを追加する必要があります。

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>3.0.0-rc-3</version>
</dependency>

最新バージョンはMavenCentralにもあります。

次に、 web.xml:にリスナーを追加する必要があります

<listener>
    <listener-class>org.crsh.plugin.WebPluginLifeCycle</listener-class>
</listener>

リスナーの準備ができたら、WEB-INFディレクトリにプロパティとコマンドを追加しましょう。 crack という名前のディレクトリを作成し、その中にコマンドとプロパティを配置します。

アプリケーションをデプロイしたら、telnet経由でシェルに接続できます。

telnet localhost 5000

crack.telnet.port プロパティを使用して、crack.propertiesファイルのtelnetポートを変更できます。

または、Spring beanを作成してプロパティを構成し、コマンドのディレクトリの場所を上書きすることもできます。

<bean class="org.crsh.spring.SpringWebBootstrap">
    <property name="cmdMountPointConfig" value="war:/WEB-INF/crash/commands/" />
    <property name="confMountPointConfig" value="war:/WEB-INF/crash/" />
    <property name="config">
        <props>
             <prop key="crash.telnet.port">5000</prop>
         </props>
     </property>
</bean>

4. CRaSHとSpringBoot

Spring Bootは、リモートシェルを介してCRaSHを組み込み販売として提供するために使用されていました。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-remote-shell</artifactId>
</dependency>

残念ながら、サポートは現在非推奨です。 それでもSpringBootアプリケーションと一緒にシェルを使用したい場合は、アタッチモードを使用できます。 アタッチモードでは、CRaSHは独自のアプリケーションではなくSpringBootアプリケーションのJVMにフックします。

crash.sh <PID>

ここ、PID> そのJVMインスタンスのプロセスID。 ホストで実行されているJVMのプロセスIDを取得するには、 jps 指図。

5. カスタムコマンドの作成

それでは、クラッシュシェルのカスタムコマンドを作成しましょう。 コマンドを作成して使用するには、2つの方法があります。 1つはGroovyを使用し、Javaも使用します。 それらを1つずつ調べていきます。

5.1. Groovyによるコマンド

まず、Groovyを使用して簡単なコマンドを作成しましょう。

class message {
	
    @Usage("show my own message")
    @Command
    Object main(@Usage("custom message") @Option(names=["m","message"]) String message) {
        if (message == null) {
            message = "No message given...";
        }
        return message;
    }
}

@Command アノテーションはメソッドをコマンドとしてマークし、 @Usage はコマンドの使用法とパラメーターを表示するために使用され、最後に@Optionはコマンドに渡されるパラメーター。

コマンドをテストしてみましょう:

5.2. Javaを使用したコマンド

Javaで同じコマンドを作成しましょう:

public class message2 extends BaseCommand {
    @Usage("show my own message using java")
    @Command
    public Object main(@Usage("custom message") 
      @Option(names = { "m", "message" }) String message) {
        if (message == null) {
            message = "No message given...";
        }
        return message;
    }
}

コマンドはGroovyのコマンドと似ていますが、ここではorg.crsh.command.BaseCommand。を拡張する必要があります。

それでは、もう一度テストしてみましょう。

6. 結論

このチュートリアルでは、CRaSHをスタンドアロンアプリケーションとしてインストールし、SpringWebアプリケーションに埋め込む方法について説明しました。 また、GroovyとJavaを使用してカスタムコマンドを作成しました。

いつものように、コードはGitHubで入手できます。