我有一个maven项目,该库也应该是一个带有的OSGi包 声明性服务。我在里面添加了带有service.xml的OSGI-INF文件夹 src / java / resources将被添加到jar中。但是:当我作为equinox项目启动项目时,我想检查服务是否已加载,我得到了无法找到OSGI-INF / service.xml的错误。我猜eclipse在启动时不会将资源文件夹添加到类路径中。
BTW:MANIFEST-MF位于根文件夹中,pom.xml包含以下文本:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
有人知道如何告诉eclipse在哪里找到元数据文件?如果这是相关的话,我正在使用m2eclipse。
提前致谢 汉纳斯
答案 0 :(得分:2)
我遇到了同样的问题,但是我手动调整了我的POM.xml,用于将生成目标/ classes / META-INF / **内容(MANIFEST.MF,属性文件,spring XML,...)复制到项目ROOT文件夹(Eclipse PDE期望):
<!--
We copy all stuff from target/classes/META-INF into META-INF/ in order
to keep Maven output with PDE.
-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>synch-pde-metadata-from-maven</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/META-INF</outputDirectory>
<resources>
<resource>
<directory>target/classes/META-INF</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!--
We delete all stuff from the root bundle's META-INF
-->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<filesets>
<fileset>
<directory>META-INF</directory>
<includes>
<include>**/*</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
(我也会在调用mvn clean时清理一些东西)它不是很有效但是有效。
Ps:您可能必须右键单击该项目并将其设为插件项目才能实现此目的。
答案 1 :(得分:0)
问题是Eclipse需要root中的OSGI-INF(以及META-INF)文件夹。
我找到了一个如何解决问题的链接。 https://www.nuxeo.com/blog/working-with-osgi-and-maven-in-eclipse/
基本上他们将OSGI-INF和META-INF文件夹放入src / main / resources
然后他们将src / main / resources文件夹设置为OSGI项目的根目录。因此,Eclipse在根目录中都有两个文件夹。 为了让Soure文件可用,他们通过在.project文件中添加一个条目为src / main / java添加了Linked Resources
<linkedResources>
<link>
<name>src</name>
<type>2</type>
<locationURI>PARENT-1-PROJECT_LOC/java</locationURI>
</link>
</linkedResources>
现在你只需要将.prject和.classpath文件复制到src / main / resources(你的新root)中,一切都应该正常工作。
到撰写本文时,我并没有自己测试,但会在不久的将来这样做。