我是OSGI新手。
我可以使用关于IntelliJ IDEA / OSGI / Maven / Sling的任何指导。
所以当我加载它时,实际的Felix插件会死掉。显然它没有被维护,并且不再与我所说的IntelliJ IDEA 13的最新版本兼容。
所以我已经将框架配置为felix-framework-4.2.1,这似乎工作正常。我最关心的是,如果我将OSGI方面应用于一个包,设置似乎表明它将改变包。既然我们在Maven中设置了这个,我认为我们不想要这个。 facet的来源似乎是Osmorc插件。当我之前使用它时,有人抱怨maven中的一些软件包没有启用OSGI,IDE想要指向一个特殊的Spring存储库,用于启用OSGI的jar依赖项。
由于我们在Maven中这样做,我是否应该打扰Osmorc?有没有更好的方法来管理IntelliJ IDEA中的OSGI?知道哪些软件包启用OSGI很方便,但错误呢?真?具体来说,我指的是“包依赖关系不会导出包”,显示在导入和注释上。
答案 0 :(得分:15)
我个人对 Intellij IDEA 13 的观察是,在分析使用非osgi导出类的类时,OSGI项目检查员会稍微积极一些。话虽这么说,解决这个问题的方法是调整检查员的严重程度。这使您可以使用在Intellij IDEA 12中使用的基于OSGI的相同方法。
要执行此操作,请进入项目设置(在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>
希望这有帮助, 阿贾伊
答案 1 :(得分:1)
我认为您目前最好的选择是使用maven捆绑插件来管理您的导入和导出。这意味着intellij只会将您的捆绑包视为maven项目。仍然应该得到正确的罐子。我在eclipse中以相同的方式处理OSGi包,它工作正常。
我还在OSGi开发邮件列表上看到有一个用于intellij计划的bndtools,但这肯定需要一段时间。