ターミナルから実行するJavaプログラムへのコマンドラインインターフェイスを作成します

smatthewenglish

私が既存のJavaプロジェクトと格闘している現在、私の目標は、プロジェクトに引数を渡すためのコマンドラインインターフェイスを作成し、いわば「実行」することです。

私は次のようにApache commonscliライブラリを使用しています。

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CommandLineParameters {

  public static void main(String[] args) {
    CommandLineParser parser = new DefaultParser();
    Options options = new Options();

    options.addOption("a", "abc", true, "First Parameter");
    options.addOption("x", "xyz", true, "Second Parameter");
    options.addOption("h", "help", false, "Shows this Help");

    try {
      CommandLine commandLine = parser.parse(options, args);

      System.out.println(commandLine.getOptionValue("a"));
      System.out.println(commandLine.getOptionValue("x"));

      if (commandLine.hasOption("h")) {
        HelpFormatter formatter = new HelpFormatter();
        formatter.printHelp("CommandLineParameters", options);
      }

    } catch (ParseException e) {
      e.printStackTrace();
    }
  }
}

Eclipseでは、にArguments渡されたRun Configurations...ものを変更することでこれを実行できます、実際にやりたいのは、などの通常の」ターミナルプログラムと同様の方法で、ターミナルシェルからこのプログラムを実行できるようにすることですgrep。またはipconfig

これはJavaを使用してどのように達成できますか?

注:コマンドラインからこのプログラムコンパイル/ビルドしようとしているのではなく、コマンドラインでプログラムへのインターフェイス作成しようとしています

ローマのプチコフスキー

提供された回答は、java -jarコマンドを使用して実行できるjarを作成する方法を説明しています次の記事では、このような「実行可能」jarを取得して、によって実行可能な「プログラム」ファイルに変換する方法について説明しますsh(したがって、で呼び出すことも、で呼び出さ./programないこともできますjava -jar program.jar):https//coderwall.com/p/ssuaxa/how- to-make-a-jar-file-linux-executable

アイデアは、zipアーカイブ(そしてajarは基本的にzipアーカイブのフレーバーです)が任意のプロローグを持つかもしれないということです。プロローグは、ファイルの先頭からzipファイルの署名までのすべてです(4文字、最初の2文字は「PK」です)。Javaがjarアーカイブを読み取るとき、そのプロローグ(署名の前のすべて)をスキップします。

したがって、の観点からはjava、そのようなjarは有効なjarになります。ただし、そのプロローグがシェルスクリプトの場合、そのようなjarは、シェルインタープリターを使用して実行できるファイルにもなります。

つまり、通常のjarコンテンツの前にjava -jar、同じjarアーカイブを引数として呼び出すだけのシェルスクリプトを追加できます。そして、プロローグjavajar無視してそれを喜んで実行します。

記事のプロローグは次のようになります。

#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
    java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1

java必要なパラメータを探して開始します。これは単なる例であり、javaコマンドを見つけるために使用されるアルゴリズムを調整して、ニーズに合わせることができます。

結果のファイルは、このランチャーシェルスクリプトと、を使用して実行する必要のあるjarファイル(メインクラスとマニフェストを含む)を連結したもので構成されますjava -jar

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ターミナルからのコマンドのようにC ++プログラムを実行します

分類Dev

JavaからMac OSターミナルコマンドを実行する方法(ランタイムを使用していますか?)

分類Dev

Linux用のInstall4jインストーラーは、ターミナルから実行するとコンソールにログを表示します

分類Dev

コマンドライン(ターミナル)からモデルインスタンスを作成する方法

分類Dev

コマンドラインからJavaからKotlinへのコンバーターを実行しますか?

分類Dev

コマンドラインからJavaからKotlinへのコンバーターを実行しますか?

分類Dev

ターミナルからターミナルコマンドを実行し、ターミナルを閉じる(プログラムを実行したままにする)ことはできますか?

分類Dev

Ubuntu 14.04のログイン画面後、ターミナルでプログラム(コマンド)を実行する

分類Dev

ターミナル/コマンドラインから直接Go(lang)コードを実行する方法は?

分類Dev

GitBashターミナルの.batファイルからコマンドを実行します

分類Dev

Flutterをインストールした後、MacOSターミナルからDartプログラムを実行します

分類Dev

LibreOfficeの基本プログラミング内からターミナルコマンドを実行しますか?

分類Dev

PHPファイルからコマンドラインプログラムを実行します

分類Dev

ターミナルからインストールしたプログラムの実行方法

分類Dev

デスクトップソフトウェアを使用せずにGitコマンドをオンライン(Webベースのターミナル/コンソール)で実行しますか?

分類Dev

実行中のスナップパッケージプログラムを停止するためのターミナルコマンドは何ですか?

分類Dev

実行中のスナップパッケージプログラムを停止するためのターミナルコマンドは何ですか?

分類Dev

インターフェイスに対するプログラミング:すべてのドメインクラスのインターフェイスを作成していますか?

分類Dev

MavenベースのJavaプロジェクトをコンパイルしてコマンドラインから実行する方法

分類Dev

コマンド ライン インターフェイスから abaqus cae コマンドを実行する際のエラー

分類Dev

プログラムでWindowsターミナルでWSLを起動し、コマンドを実行する方法

分類Dev

プログラミング言語開発の実践、golangスタイルのインターフェースをC ++にコンパイルする方法は?

分類Dev

jarファイルに依存するコマンドラインからJavaプログラムを実行していますか?

分類Dev

コマンドラインから複雑なファイル構造を持つJavaプログラムをコンパイルして実行する

分類Dev

シェルプロンプトで新しいターミナルを開き、コマンドラインで複数のコマンドを実行するにはどうすればよいですか?

分類Dev

シェルプロンプトで新しいターミナルを開き、コマンドラインで複数のコマンドを実行するにはどうすればよいですか?

分類Dev

コマンドラインからWinSat.exeを実行すると、新しいターミナルウィンドウが開きます。

分類Dev

DockerコンテナでSparkドライバープログラムを実行しています-エグゼキューターからドライバーへの接続がありませんか?

分類Dev

stの-eフラグに渡されたセミコロン区切りのコマンドを実行します(シンプルターミナル)

Related 関連記事

  1. 1

    ターミナルからのコマンドのようにC ++プログラムを実行します

  2. 2

    JavaからMac OSターミナルコマンドを実行する方法(ランタイムを使用していますか?)

  3. 3

    Linux用のInstall4jインストーラーは、ターミナルから実行するとコンソールにログを表示します

  4. 4

    コマンドライン(ターミナル)からモデルインスタンスを作成する方法

  5. 5

    コマンドラインからJavaからKotlinへのコンバーターを実行しますか?

  6. 6

    コマンドラインからJavaからKotlinへのコンバーターを実行しますか?

  7. 7

    ターミナルからターミナルコマンドを実行し、ターミナルを閉じる(プログラムを実行したままにする)ことはできますか?

  8. 8

    Ubuntu 14.04のログイン画面後、ターミナルでプログラム(コマンド)を実行する

  9. 9

    ターミナル/コマンドラインから直接Go(lang)コードを実行する方法は?

  10. 10

    GitBashターミナルの.batファイルからコマンドを実行します

  11. 11

    Flutterをインストールした後、MacOSターミナルからDartプログラムを実行します

  12. 12

    LibreOfficeの基本プログラミング内からターミナルコマンドを実行しますか?

  13. 13

    PHPファイルからコマンドラインプログラムを実行します

  14. 14

    ターミナルからインストールしたプログラムの実行方法

  15. 15

    デスクトップソフトウェアを使用せずにGitコマンドをオンライン(Webベースのターミナル/コンソール)で実行しますか?

  16. 16

    実行中のスナップパッケージプログラムを停止するためのターミナルコマンドは何ですか?

  17. 17

    実行中のスナップパッケージプログラムを停止するためのターミナルコマンドは何ですか?

  18. 18

    インターフェイスに対するプログラミング:すべてのドメインクラスのインターフェイスを作成していますか?

  19. 19

    MavenベースのJavaプロジェクトをコンパイルしてコマンドラインから実行する方法

  20. 20

    コマンド ライン インターフェイスから abaqus cae コマンドを実行する際のエラー

  21. 21

    プログラムでWindowsターミナルでWSLを起動し、コマンドを実行する方法

  22. 22

    プログラミング言語開発の実践、golangスタイルのインターフェースをC ++にコンパイルする方法は?

  23. 23

    jarファイルに依存するコマンドラインからJavaプログラムを実行していますか?

  24. 24

    コマンドラインから複雑なファイル構造を持つJavaプログラムをコンパイルして実行する

  25. 25

    シェルプロンプトで新しいターミナルを開き、コマンドラインで複数のコマンドを実行するにはどうすればよいですか?

  26. 26

    シェルプロンプトで新しいターミナルを開き、コマンドラインで複数のコマンドを実行するにはどうすればよいですか?

  27. 27

    コマンドラインからWinSat.exeを実行すると、新しいターミナルウィンドウが開きます。

  28. 28

    DockerコンテナでSparkドライバープログラムを実行しています-エグゼキューターからドライバーへの接続がありませんか?

  29. 29

    stの-eフラグに渡されたセミコロン区切りのコマンドを実行します(シンプルターミナル)

ホットタグ

アーカイブ