0

我正在开发一个 Eclipse 插件。这个 Eclipse 插件包含一个新建项目向导,在performFinish我的向导的方法中,我想使用 Maven (M2E) 来执行一个原型:生成命令。

然后我找到了这个资源,我能够让 maven 调用程序以编程方式生成原型,但是它要求我定义一个 maven.home 以便它知道 mvn 可执行文件在哪里。

如果实现这一点的最佳方法是使用 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”,而是可能是“Path”甚至是“path”——至少在 Windows 系统上是这样。它也可能是 m2_home 等。所以 - 我过滤了环境变量而忽略了这种情况。(我实际上并没有寻找 maven,而是 svn - 但我遇到了类似的问题)。所以 - 我经常阅读“set m2home”或“set m2_home”等 - 我不确定是否有约定。

checkForMavenHomeIn应该寻找bin的父目录。“path”将指向“bin”,其他指向maven主目录。

否则,您可能必须提示用户输入目录并将其保存到一些 Eclipse 工作区首选项中 - 但最好执行一些预搜索。

于 2013-02-10T13:36:08.000 回答