Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to configure OSGI in IntelliJ when it's handled by Maven

I'm an OSGI newb.

I can really use any guidance I can get regarding IntelliJ IDEA / OSGI / Maven / Sling.

So the actual Felix plugin dies when I load it. Apparently it hasn't been maintained and is no longer compatible with the latest release by which I mean IntelliJ IDEA 13.

So I've configured the framework to felix-framework-4.2.1, and that seems to work fine. My greatest concern is that if I apply the OSGI facet to a bundle, the settings seem to indicate that it will change the bundle. Since we have this set up in Maven, I don't think we want this. The source of the facet seems to be the Osmorc plugin. When I used it before, there were complaints about some packages in maven that weren't OSGI enabled and the IDE wanted to point to a special Spring repository for OSGI enabled jar dependencies.

Since we are doing this in Maven, should I even bother with Osmorc? Is there a better way to manage OSGI in IntelliJ IDEA? It is handy knowing which packages are OSGI enabled but an error for that? Really? Specifically I am referring to "The package is not exported by the bundle dependencies" showing up on imports and annotations.

like image 750
user447607 Avatar asked Jan 30 '14 18:01

user447607


People also ask

Does IntelliJ use OSGi?

OSGiUltimate Support for developing applications based on the OSGi framework is not bundled with IntelliJ IDEA. You can install the OSGi plugin from the JetBrains repository as described in Install plugins. You can find the documentation for OSGi in earlier versions of IntelliJ IDEA Help.

How to force update Maven project in IntelliJ?

Reload a Maven project xml file in the editor, you need to load the changes. IntelliJ IDEA displays a notification icon in the right part of the editor suggesting to Load Maven Changes made to the project ( Ctrl+Shift+O ).

What is Maven project in IntelliJ?

IntelliJ IDEA supports a fully-functional integration with Maven that helps you automate your building process. You can easily create a new Maven project, open and sync an existing one, add a Maven support to any existing IntelliJ IDEA project, configure and manage a multi-module project.


2 Answers

My personal observation with Intellij IDEA 13 is that the OSGI project inspector is slightly more aggressive when it comes to profiling your classes that utilize non-osgi exported classes. That being said, a way around this is by adjusting the inspector severity level. This enables you to use the same OSGI-based approach you were using in Intellij IDEA 12.

To do this, go into your project settings (on Mac: Command+,) and then navigate to the following node:

Inspections --> OSGI --> Package accessibility

Once selected, you'll be able to change the severity level from error to warning.

Performing this change is requisite on a few changes in your 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>

Hope this helps, Ajay

like image 150
Ajay Pasricha Avatar answered Sep 22 '22 00:09

Ajay Pasricha


I think your best bet currently is to use the maven bundle plugin to manage your imports and exports. This means intellij will simply see your bundles as maven projects. Still the correct jars should result. I handle OSGi bundles the same way in eclipse and it works fine.

I also read on the OSGi dev mailing list that there is a bndtools for intellij planned but this will for sure take a while.

like image 22
Christian Schneider Avatar answered Sep 23 '22 00:09

Christian Schneider