我正在开发一个 Eclipse 插件。这个 Eclipse 插件包含一个新建项目向导,在performFinish
我的向导的方法中,我想使用 Maven (M2E) 来执行一个原型:生成命令。
然后我找到了这个资源,我能够让 maven 调用程序以编程方式生成原型,但是它要求我定义一个 maven.home 以便它知道 mvn 可执行文件在哪里。
如果实现这一点的最佳方法是使用 maven 调用程序,我怎样才能获得嵌入式 m2e mvn(m2e 的 maven.home)的路径?
好吧-我只知道:您可能必须搜索它。大多数环境变量 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 工作区首选项中 - 但最好执行一些预搜索。