OSGI中的Google Client API

Cri*_*ell 2 java osgi google-api maven aem

我在OSGI应用程序框架(AEM)中提供Java的OAuth客户端库所需的依赖项时遇到了麻烦。

https://developers.google.com/api-client-library/java/google-oauth-java-client/setup

我不想手动将每个依赖项转换为OSGI捆绑包BND。所以我正在使用maven-bundle-plugin将它们嵌入到我的包中。到目前为止,我的过程一直是在error.log上查看有关“捆绑中未解决的约束”的消息。然后跟踪丢失的包,添加Maven依赖项,并将其添加到Embed-Dependency部分。这似乎适用于google-http-client和google-oauth-client。GSON(或Jackson2)无法通过这种方式解决,我得到的信息是...

更新:

正如Neil指出的那样,我需要为GSON(google-http-client-gson)嵌入其他依赖项。谢谢!

但是,它仍然无法部署,目前正在报告此消息...

org.osgi.framework.BundleException:com.mypackage.services软件包中未解决的约束[394]:无法解决394.130:缺少要求[394.130] osgi.wiring.package; (osgi.wiring.package = sun.misc)

似乎其他人对此有麻烦,并且可能与OSGi中的Guava有关,我尝试将sun.misc设置为可选。

<Import-Package>sun.misc.*;resolution:=optional,*</Import-Package>
Run Code Online (Sandbox Code Playgroud)

但是捆绑软件无法启动,并提供错误消息“捆绑软件中未解决的约束”。此时,我的问题是...

是否有人在OSGI中成功部署了Java的Google CLient API?如果是这样,怎么办?

或者。我将很高兴收到有关此sun.misc软件包的建议,并且可能与在OSGI中使用Guava有关


我的pom.xml

<dependencies>
<dependency>
 <groupId>com.google.api-client</groupId>
 <artifactId>google-api-client</artifactId>
 <version>1.20.0</version>
</dependency>

<dependency>
  <groupId>com.google.http-client</groupId>
  <artifactId>google-http-client</artifactId>
  <version>1.20.0</version>
</dependency>

<dependency>
  <groupId>com.google.api-client</groupId>
  <artifactId>google-api-client-java6</artifactId>
  <version>1.20.0</version>
</dependency>

<dependency>
    <groupId>com.google.http-client</groupId>
    <artifactId>google-http-client-jackson2</artifactId>
    <version>1.20.0</version>
</dependency>

<dependency>
    <groupId>com.google.http-client</groupId>
    <artifactId>google-http-client-gson</artifactId>
    <version>1.20.0</version>
</dependency>

<dependency>
  <groupId>com.google.oauth-client</groupId>
  <artifactId>google-oauth-client</artifactId>
  <version>1.20.0</version>
</dependency>

<dependency>
  <groupId>com.google.oauth-client</groupId>
  <artifactId>google-oauth-client-java6</artifactId>
  <version>1.20.0</version>
</dependency>

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.jms</artifactId>
    <version>3.2-b06</version>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>


<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.1</version>
</dependency>
<dependency>
    <groupId>org.apache.servicemix.bundles</groupId>
    <artifactId>org.apache.servicemix.bundles.ehcache</artifactId>
    <version>2.6.11_1</version>
</dependency>

<dependency>
    <groupId>org.apache.servicemix.bundles</groupId>
    <artifactId>org.apache.servicemix.bundles.avalon-framework</artifactId>
    <version>4.3.1_1</version>
</dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-Activator>com.mypackage.services.osgi.Activator</Bundle-Activator>
                    <Embed-Dependency>    
                        google-api-client;scope=compile,
                        google-oauth-client;scope=compile,
                        google-http-client;scope=compile,
                        google-api-client-gson;scope=compile,                 
                        gson;scope=compile,
                        httpclient;scope=compile, 
                    </Embed-Dependency>
                    <Sling-Test-Regexp>.*Test</Sling-Test-Regexp>
                </instructions>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

来自MANIFEST.MF的部分

Embed-Dependency: google-api-client;scope=compile,google-api-client-java
 6;scope=compile,google-oauth-client;scope=compile,google-oauth-client-j
 ava6;scope=compile,google-http-client;scope=compile,google-http-client-
 gson;scope=compile,google-http-client-jackson2;scope=compile,gson;scope
 =compile,guava;scope=compile,httpclient;scope=compile,httpcore;scope=co
 mpile,
Embedded-Artifacts: google-api-client-1.20.0.jar;g="com.google.api-clien
 t";a="google-api-client";v="1.20.0",google-api-client-java6-1.20.0.jar;
 g="com.google.api-client";a="google-api-client-java6";v="1.20.0",google
 -oauth-client-1.20.0.jar;g="com.google.oauth-client";a="google-oauth-cl
 ient";v="1.20.0",google-oauth-client-java6-1.20.0.jar;g="com.google.oau
 th-client";a="google-oauth-client-java6";v="1.20.0",google-http-client-
 1.20.0.jar;g="com.google.http-client";a="google-http-client";v="1.20.0"
 ,google-http-client-gson-1.20.0.jar;g="com.google.http-client";a="googl
 e-http-client-gson";v="1.20.0",google-http-client-jackson2-1.20.0.jar;g
 ="com.google.http-client";a="google-http-client-jackson2";v="1.20.0",gs
 on-2.3.jar;g="com.google.code.gson";a="gson";v="2.3",guava-18.0.jar;g="
 com.google.guava";a="guava";v="18.0",httpclient-4.5.jar;g="org.apache.h
 ttpcomponents";a="httpclient";v="4.5",httpcore-4.4.1.jar;g="org.apache.
 httpcomponents";a="httpcore";v="4.4.1"
Import-Package: com.adobe.cq.sightly;version="[2.2,3)",com.day.cq.common
 s;version="[5.7,6)",com.day.cq.commons.date;version="[5.7,6)",com.day.c
 q.dam.api;version="[1.2,2)",com.day.cq.search;version="[1.1,2)",com.day
 .cq.search.result;version="[1.1,2)",com.day.cq.tagging;version="[5.7,6)
 ",com.day.cq.wcm.api;version="[1.2,2)",com.day.cq.wcm.api.components;ve
 rsion="[5.7,6)",com.day.cq.wcm.commons;version="[5.7,6)",com.day.cq.wcm
 .foundation;version="[5.7,6)",com.fasterxml.jackson.core;version="[2.1,
 3)",javax.annotation,javax.crypto,javax.crypto.spec,javax.jcr;version="
 [2.0,3)",javax.naming,javax.naming.directory,javax.naming.ldap,javax.ne
 t,javax.net.ssl,javax.security.auth.x500,javax.servlet,javax.servlet.ht
 tp,javax.xml.parsers,org.apache.commons.codec.binary,org.apache.commons
 .httpclient;version="[3.1,4)",org.apache.commons.httpclient.methods;ver
 sion="[3.1,4)",org.apache.commons.httpclient.params;version="[3.1,4)",o
 rg.apache.commons.io;version="[1.4,2)",org.apache.commons.logging;versi
 on="[1.1,2)",org.apache.sling.api;version="[2.3,3)",org.apache.sling.ap
 i.request;version="[2.4,3)",org.apache.sling.api.resource;version="[2.5
 ,3)",org.apache.sling.api.servlets;version="[2.1,3)",org.apache.sling.a
 pi.wrappers;version="[2.5,3)",org.apache.sling.jcr.api;version="[2.2,3)
 ",org.apache.sling.junit.annotations;version="[1.0,2)",org.ietf.jgss,or
 g.junit;version="[4.8,5)",org.junit.runner;version="[4.8,5)",org.osgi.f
 ramework;version="[1.5,2)",org.osgi.service.component;version="[1.1,2)"
 ,org.slf4j;version="[1.6,2)",org.w3c.dom,org.xml.sax,sun.misc
Run Code Online (Sandbox Code Playgroud)

Cri*_*ell 5

所以我终于让它工作了。我已经发布了代码,以防它对其他人有帮助,或者是找到更好的方法来做。

依赖...

<!-- Embedded Google Client API JAR's -->
<dependency>
 <groupId>com.google.api-client</groupId>
 <artifactId>google-api-client</artifactId>
 <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>com.google.http-client</groupId>
  <artifactId>google-http-client</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>com.google.api-client</groupId>
  <artifactId>google-api-client-java6</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
    <groupId>com.google.http-client</groupId>
    <artifactId>google-http-client-jackson2</artifactId>
    <version>1.20.0</version>
</dependency>
<dependency>
    <groupId>com.google.http-client</groupId>
    <artifactId>google-http-client-gson</artifactId>
    <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>com.google.oauth-client</groupId>
  <artifactId>google-oauth-client</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
  <groupId>com.google.oauth-client</groupId>
  <artifactId>google-oauth-client-java6</artifactId>
  <version>1.20.0</version>
</dependency>
<dependency>
    <groupId>org.apache.servicemix.bundles</groupId>
    <artifactId>org.apache.servicemix.bundles.avalon-framework</artifactId>
    <version>4.3.1_1</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.jms</artifactId>
    <version>3.2-b06</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

maven-bundle-plugin设置

    <plugin>
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <extensions>true</extensions>
      <configuration>
          <instructions>
              <Bundle-Activator>com.r2i.michigan.lsa.services.osgi.Activator</Bundle-Activator>
              <Embed-Dependency>                             
                  *;scope=compile|runtime,
              </Embed-Dependency>
                <Embed-Transitive>true</Embed-Transitive> 
                <Import-Package>
                  sun.misc;resolution:=optional,
                  com.sun.jdmk.comm;resolution:=optional,*
                </Import-Package>                       
              <Sling-Test-Regexp>.*Test</Sling-Test-Regexp>
          </instructions>
      </configuration>
    </plugin>   
Run Code Online (Sandbox Code Playgroud)