Как настроить OSGI в IntelliJ, когда он обрабатывается Maven

Я новичок OSGI.

Я действительно могу использовать любые рекомендации, которые я могу получить относительно IntelliJ IDEA / OSGI / Maven / Sling.

таким образом, фактический плагин Felix умирает, когда я загружаю его. По-видимому, он не поддерживается и больше не совместим с последней версией, под которой я подразумеваю IntelliJ IDEA 13.

поэтому я настроил фреймворк на felix-framework-4.2.1, и это, похоже, работает нормально. Моя самая большая проблема заключается в том, что если я применяю фасет OSGI к пучку, настройки, похоже, указывают на то, что он изменит пакет. Поскольку мы установили это в Maven, я не думаю, что мы этого хотим. Источник фасеточных кажется плагин Osmorc. Когда я использовал его раньше, были жалобы на некоторые пакеты в maven, которые не были включены OSGI, и IDE хотела указать на специальный репозиторий Spring для зависимостей jar с поддержкой OSGI.

поскольку мы делаем это в Maven, должен ли я даже беспокоиться об Osmorc? Есть ли лучший способ управления OSGI в идее IntelliJ? Это удобно знать, какие пакеты OSGi включены, но ошибка для этого? Неужели? В частности, я имею в виду, что "пакет не экспортируется зависимостями пакета", отображаемыми при импорте и аннотациях.

2 ответов


мое личное наблюдение с Intellij IDEA 13 заключается в том, что инспектор проектов OSGI немного более агрессивен, когда дело доходит до профилирования ваших классов, которые используют не экспортированные классы osgi. Это, как говорится, способ обойти это путем регулировки уровня серьезности инспектора. Это позволяет использовать тот же подход на основе OSGI, который вы использовали в Intellij IDEA 12.

для этого перейдите в настройки проекта (на Mac:команда+,) а затем перейдите к следующему узлу:

Inspections --> OSGI --> Package accessibility

после выбора вы сможете изменить уровень серьезности с ошибки на предупреждение.

выполнение этого изменения необходимо для нескольких изменений в вашем pom.XML-код:

<dependencies>
.
.
    <dependency>
      <groupId>com.pkg.name</groupId>
      <artifactId>some-non-osgi-artifact</artifactId>
      <version>0.1-EXAMPLE</version>
   </dependency>
</dependencies>

<build>
    <plugins>
    .
    .
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>${maven-bundle-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <Export-Package>
                        you.know.what.goes.here
                    </Export-Package>
                    <Private-Package>you.know.what.goes.here</Private-Package>
                    <Import-Package>
                        *
                    </Import-Package>
                    <Embed-Dependency>some-non-osgi-artifact;scope=compile|runtime;inline=false</Embed-Dependency>
                    <Embed-Transitive>true</Embed-Transitive>
                    <Embed-StripGroup>true</Embed-StripGroup>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

надеюсь, это поможет, Аджай!--5-->


Я думаю, что в настоящее время лучше всего использовать плагин Maven bundle для управления импортом и экспортом. Это означает, что intellij просто увидит ваши пакеты как проекты maven. Все равно должны получиться правильные банки. Я обрабатываю пакеты OSGi таким же образом в eclipse, и он отлично работает.

Я также прочитал в списке рассылки OSGi dev, что для intellij планируется bndtools, но это наверняка займет некоторое время.