0

私はEclipseプラグインを開発しています。この Eclipse プラグインには New Project ウィザードが含まれており、performFinish私のウィザードの方法では、Maven (M2E) を使用して archetype:generate コマンドを実行したいと考えています。

次に、このリソースを見つけて、maven 呼び出し元にプログラムでアーキタイプを生成させることができましたが、mvn 実行可能ファイルがどこにあるかを知るために maven.home を定義する必要があります。

これを達成する最善の方法が maven インボーカーを使用することである場合、埋め込まれた m2e mvn (m2e の maven.home) へのパスを取得するにはどうすればよいですか?

4

1 に答える 1

1

ええと、私が知っているのは、おそらくそれを検索する必要があるということだけです。環境変数 M2_HOME、M3_HOME、または MAVEN_HOME のほとんどは、セットアップ/インストール プロセス中に設定されます。しかし、それが常に当てはまるかどうかはわかりません。コマンド プロンプトから直接 maven を起動できる場合は、おそらく PATH 環境にあります。そのため、Maven の環境を検索します。

String mavenHomePath = System.getProperty("maven.home");

if (mavenHomePath == null) {
    Map<String,String> filteredMap = new HashMap<>();
    final List<String> searchEnv = Arrays.asList(new String[]{"m3_home", "m3home", "m2_home", "m2home", "maven_home", "mavenhome", "path"}); 
    for (final Map.Entry<String, String> entry : System.getenv().entrySet()) {
        final String key = entry.getKey().toLowerCase();
        if (searchEnv.contains(key)){
            filteredMap.put(key, entry.getValue());
        }
    }
    for (String key : searchEnv) {
        for (final String pathEnv : filteredMap.values()) {
            for (final String path : pathEnv.split(File.pathSeparator)) {
                mavenHomePath = checkForMavenHomeIn(new File(path));
                if (mavenHomePath != null) break;
            }
            if (mavenHomePath != null) break;
        }
        if (mavenHomePath != null) break;
    }
}

System.setProperty("maven.home", mavenHomePath);

invokeYourPlugIn();

残念ながら、「PATH」は常に「PATH」という名前ではありませんが、少なくとも Windows システムでは「Path」または「path」でさえある可能性があります。m2_home などの場合もあります。そのため、大文字と小文字を無視して環境変数をフィルター処理しました。(実際にはmavenを探しませんでしたが、svnを探しましたが、同様の問題がありました)。そのため、「set m2home」や「set m2_home」などをよく読んでいますが、慣習があるかどうかはわかりません。

binのcheckForMavenHomeIn親ディレクトリを探す必要があります。「パス」は「ビン」を指し、その他はmavenホームディレクトリを指します。

それ以外の場合は、おそらくユーザーにディレクトリの入力を求め、それをいくつかの Eclipse ワークスペース設定に保存する必要がありますが、少し事前検索を実行することをお勧めします。

于 2013-02-10T13:36:08.000 に答える