我正在开发一个Eclipse插件。这个Eclipse插件包含一个New Project向导,在我的向导的performFinish
方法中,我想使用Maven(M2E)来执行archetype:generate命令。
然后我发现this resource并且我能够让maven调用者以编程方式生成原型,但是它要求我定义一个maven.home以便它知道mvn可执行文件的位置。
如果实现这一目标的最佳方法是使用maven调用者,我怎样才能获得嵌入式m2e mvn(m2e的maven.home)的路径?
答案 0 :(得分: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系统上如此。它也可能是m2_home等。所以 - 我过滤了忽略大小写的环境变量。 (我实际上并没有寻找maven,但svn - 但我有类似的问题)。所以 - 我经常阅读“set m2home”或“set m2_home”等。 - 我不确定是否有约定。
checkForMavenHomeIn
应该查找bin的父目录。 “path”将指向“bin”,其他指向maven主目录。
否则,您可能必须提示用户输入目录并将其保存到某些eclipse工作区首选项中 - 但执行一些预搜索会很好。