Ну, я знаю только это: вам, вероятно, придется его искать. Обычно в процессе установки/установки устанавливаются одна из переменных среды 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. «путь» указывает на «bin», а остальные - на домашний каталог maven.
В противном случае вам, вероятно, придется запрашивать пользователя для каталога и сохранять его в некоторых настройках рабочей области затмения - но было бы неплохо выполнить небольшой предварительный поиск.
- ну, я просто вижу, что было бы лучше добавить 'if (mavenExePath! = Null) break;' каждому из циклов в конце - но теперь это будет мешать коду, и я просто хотел сделать смысл. Однако, если другой плагин требует наличия одной из переменных среды mxxhome, нет никакого способа установить это программно в текущем сеансе java. Но вы можете установить свойство 'maven.home' перед вызовом другого плагина. –