如何使用maven结构化项目在eclipse中调试OSGi Bundle

时间:2010-08-09 14:07:15

标签: eclipse maven-2 osgi

我有一个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。

提前致谢 汉纳斯

2 个答案:

答案 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)中,一切都应该正常工作。

到撰写本文时,我并没有自己测试,但会在不久的将来这样做。