встраивание maven в приложение OSGi - PullRequest
1 голос
/ 31 мая 2010

Я пытаюсь вызвать MavenCli из моего проекта плагина OSGi. Я добавил правильные библиотеки в путь сборки и в манифест. Я считаю, что до сих пор все сделал правильно, потому что, когда я добавляю метод main в класс, который вызывает maven, и запускаю его в eclipse, все работает как положено. Когда я запускаю его из своего плагина OSGi, я получаю следующую ошибку (с ключами maven -X -e):

Apache Maven 3.0-beta-1 (r935667; 2010-04-19 10: 00: 39-0700) Версия Java: 1.6.0_16 Дом Java: C: \ Java \ jdk1.6.0_16 \ jre Локаль по умолчанию: en_US, кодировка платформы: Cp1252 Название ОС: "Windows 7" версия: "6.1" arch: "amd64" Семейство: "Windows" [INFO] Включены трассировки ошибок. [ОШИБКА] Ошибка при выполнении Maven.

org.codehaus.plexus.component.repository.exception.ComponentLookupException: дескриптор компонента не найден в хранилище компонентов роль: org.apache.maven.Maven roleHint: classRealm: не указано в org.codehaus.plexus.DefaultComponentRegistry.getComponentManager (DefaultComponentRegistry.java:435) в org.codehaus.plexus.DefaultComponentRegistry.getComponent (DefaultComponentRegistry.java:353) в org.codehaus.plexus.DefaultComponentRegistry.lookup (DefaultComponentRegistry.java:178) в org.codehaus.plexus.DefaultPlexusContainer.lookup (DefaultPlexusContainer.java:383) в org.apache.maven.cli.MavenCli.container (MavenCli.java:363) в org.apache.maven.cli.MavenCli.doMain (MavenCli.java:156) в org.apache.maven.cli.MavenCli.doMain (MavenCli.java:131)

Я использую Maven 3, бета 1 и использую следующий вызов метода:

int x = MavenCli.doMain(params.toArray(new String[] {}), null);

где params содержит такие вещи, как "compile" и т. Д.

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 11 июля 2010

Я получил эту работу, передав передачу загрузчика классов (this.getClass (). GetClassLoader ()) в DefaultContainerConfiguration и передав мою DefaultContainerConfiguration в DefaultPlexusContainer. Используя сплетение, я смог загрузить экземпляр MavenExecutionRequestPopulator и объект Maven.

Затем, когда я пытаюсь выполнить какие-либо цели, я создаю MavenExecutionRequest и устанавливаю файл Pom, системные и пользовательские свойства. Свойства системы получены из Системы и имеют свойства my -Dfoo = x и т. Д.

После этого я использую метод, который бессовестно украл (не могу вспомнить, откуда), но немного адаптировался ...

public MavenExecutionResult execute(MavenExecutionRequest request) {
        if (request == null) {
            return null;
        }
        MavenExecutionResult result;
        try {
            populator.populateDefaults(request);
            result = maven.execute(request);
        } catch (MavenExecutionRequestPopulationException ex) {
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

Дайте мне знать, если потребуется дополнительная информация. Я бы опубликовал весь код, но он распространяется на множество файлов. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...