2013-02-09 2 views
0

Я разрабатываю плагин Eclipse. Этот плагин Eclipse содержит мастер New Project и метод performFinish моего мастера. Я хочу использовать Maven (M2E) для выполнения команды archetype: generate.Программный запуск M2E Команда Maven

Я нашел this resource, и я могу получить maven invoker для генерации архетипов программным способом, однако он требует, чтобы я определил maven.home, чтобы он знал, где находится исполняемый файл mvn.

Если лучший способ достичь этого - использовать maven invoker, как я могу получить путь к встроенному m2e mvn (m2e maven.home)?

ответ

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. «путь» указывает на «bin», а остальные - на домашний каталог maven.

В противном случае вам, вероятно, придется запрашивать пользователя для каталога и сохранять его в некоторых настройках рабочей области затмения - но было бы неплохо выполнить небольшой предварительный поиск.

+0

- ну, я просто вижу, что было бы лучше добавить 'if (mavenExePath! = Null) break;' каждому из циклов в конце - но теперь это будет мешать коду, и я просто хотел сделать смысл. Однако, если другой плагин требует наличия одной из переменных среды mxxhome, нет никакого способа установить это программно в текущем сеансе java. Но вы можете установить свойство 'maven.home' перед вызовом другого плагина. –

Смежные вопросы