【问题标题】:How to configure OSGI in IntelliJ when it's handled by MavenMaven处理时如何在IntelliJ中配置OSGI
【发布时间】:2014-01-30 18:56:34
【问题描述】:

我是 OSGI 新手。

我真的可以使用我能获得的关于 IntelliJ IDEA / OSGI / Maven / Sling 的任何指导。

所以当我加载它时,实际的 Felix 插件会死掉。显然它没有得到维护,并且不再与我的意思是 IntelliJ IDEA 13 的最新版本兼容。

所以我已经将框架配置为 felix-framework-4.2.1,这似乎工作正常。我最担心的是,如果我将 OSGI 方面应用于捆绑软件,设置似乎表明它将更改捆绑软件。由于我们在 Maven 中设置了这个,我认为我们不需要这个。方面的来源似乎是 Osmorc 插件。当我之前使用它时,有人抱怨 maven 中的一些包没有启用 OSGI,并且 IDE 想要指向一个特殊的 Spring 存储库,用于启用 OSGI 的 jar 依赖项。

既然我们是在 Maven 中做这件事的,我还应该打扰 Osmorc 吗?有没有更好的方法来管理 IntelliJ IDEA 中的 OSGI?知道哪些包启用了 OSGI 很方便,但是会出错吗?真的吗?具体来说,我指的是在导入和注释上显示的“包不是由包依赖项导出的”。

【问题讨论】:

    标签: maven intellij-idea osgi sling


    【解决方案1】:

    我对 Intellij IDEA 13 的个人观察是,在分析使用非 osgi 导出类的类时,OSGI 项目检查器会稍微激进一些。话虽如此,解决此问题的一种方法是调整检查员的严重性级别。这使您能够使用在 Intellij IDEA 12 中使用的相同的基于 OSGI 的方法。

    为此,请进入您的项目设置(在 Mac 上:Command+,),然后导航到以下节点:

    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>
    

    希望这会有所帮助, 阿杰

    【讨论】:

      【解决方案2】:

      我认为你目前最好的选择是使用 maven bundle 插件来管理你的导入和导出。这意味着 intellij 只会将您的包视为 maven 项目。仍然应该产生正确的罐子。我在 eclipse 中以同样的方式处理 OSGi 包,它工作正常。

      我还在 OSGi 开发者邮件列表中读到,有一个用于 intellij 的 bndtools 计划,但这肯定需要一段时间。

      【讨论】:

        猜你喜欢
        • 2021-07-17
        • 2015-11-26
        • 2020-08-05
        • 1970-01-01
        • 2020-01-01
        • 2014-04-14
        • 2012-07-14
        • 1970-01-01
        • 2016-07-03
        相关资源
        最近更新 更多