How to import a class from third party jar file in an OSGi component

时间:2015-07-14 01:04:00

标签: java maven osgi aem aem-developer-tools

I am using https://eclipse.adobe.com/aem/dev-tools/之间的字符串值以创建项目。一旦创建,我在eclipse中有以下结构:

enter image description here

我希望能够在我的组件中使用GoogleMaps API。所以我在hometest.core/pom.xml

中添加了它的依赖项
<dependency>
    <groupId>com.google.maps</groupId>
    <artifactId>google-maps-services</artifactId>
    <version>0.1.7</version>
    <scope>compile</scope>
</dependency>

我还在_exportcontents

中的hometest.core/pom.xml添加了所有内容
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
                    <Embed-Directory>OSGI-INF/lib</Embed-Directory>
                    <_exportcontents>
                                    *
                    </_exportcontents>
                </instructions>
            </configuration>
        </plugin>

然后我将com.google.maps.model.GeocodingResult导入HelloServiceProxy.java,如下所示:

enter image description here

我使用mvn clean install -PautoInstallPackage

将软件包安装到aem的本地实例

但是,当我尝试将组件添加到页面时,我收到以下错误:

  

java.lang.Error:未解决的编译问题:只有一个类型可以   进口。 com.google.maps.model.GeocodingResult解析为包

以下是错误的屏幕截图:

enter image description here

更新1

我从另一个全新的AEM项目开始,做了以下事情:

    核心/ pom.xml中的
  • 添加了maven-bundle-plugin的配置设置,如此

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
            <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
            <Embed-Directory>OSGI-INF/lib</Embed-Directory>
            <_exportcontents>
             *
            </_exportcontents>
            </instructions>
            </configuration>
        </plugin>
    
  • 像这样添加谷歌地图依赖:

    <dependency>
    <groupId>com.google.maps</groupId>
    <artifactId>google-maps-services</artifactId>
    <version>0.1.7</version>
    <scope>compile</scope>
    </dependency>
    
  • 使用此mvn clean install -PautoInstallPackage

  • 进行部署

当我尝试向页面添加组件时,我收到错误:

java.lang.Error: Unresolved compilation problems: 
    Only a type can be imported. com.google.maps.model.GeocodingResult resolves to a package
    Only a type can be imported. org.demo.anothertest.core.HelloService resolves to a package
    HelloService cannot be resolved to a type
    HelloService cannot be resolved to a type

1 个答案:

答案 0 :(得分:0)

该错误表示google-maps-services捆绑包中的类不可用于hometest.core捆绑包。很可能嵌入束在这一点上不起作用。

您是否可以尝试部署嵌入google-maps-services的单独捆绑包,看看是否有效?