You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2019/06/21 08:38:41 UTC

[jclouds] branch master updated: Add OSGi exports to jclouds-gson (#38)

This is an automated email from the ASF dual-hosted git repository.

nacx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git


The following commit(s) were added to refs/heads/master by this push:
     new 753bd8d  Add OSGi exports to jclouds-gson (#38)
753bd8d is described below

commit 753bd8d78178112029bb9cc1b13a8d1e9f041cf8
Author: Ignasi Barrera <na...@apache.org>
AuthorDate: Fri Jun 21 10:38:36 2019 +0200

    Add OSGi exports to jclouds-gson (#38)
    
    * Add OSGi exports to jclouds-gson
    
    * Proper generation of OSGi directives in the manifest file
    
    * Fixes
    
    * Remove commented bits
---
 gson/gson-bundle/pom.xml       | 51 +++++++++++++++++++++++++++++++++
 gson/{ => gson-shaded}/pom.xml |  9 +++---
 gson/pom.xml                   | 65 ++++++++++--------------------------------
 project/pom.xml                |  4 +--
 4 files changed, 73 insertions(+), 56 deletions(-)

diff --git a/gson/gson-bundle/pom.xml b/gson/gson-bundle/pom.xml
new file mode 100644
index 0000000..6fc7b77
--- /dev/null
+++ b/gson/gson-bundle/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>jclouds-project</artifactId>
+    <groupId>org.apache.jclouds</groupId>
+    <version>2.2.0-SNAPSHOT</version>
+    <relativePath>../../project/pom.xml</relativePath>
+  </parent>
+
+  <artifactId>jclouds-gson</artifactId>
+  <name>jclouds-gson OSGi bundle</name>
+  <description>jclouds-gson OSGi bundle with gson internal packages relocated</description>
+  <packaging>bundle</packaging>
+
+  <properties>
+    <jclouds.osgi.export>
+      org.jclouds.json.gson.internal*;version=${project.version};-noimport:=true,
+      !com.google.gson.internal*,
+      com.google.gson*;version=${project.version};-noimport:=true,
+    </jclouds.osgi.export>
+    <jclouds.osgi.import>*</jclouds.osgi.import>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.jclouds</groupId>
+      <artifactId>jclouds-gson-shaded</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/gson/pom.xml b/gson/gson-shaded/pom.xml
similarity index 91%
copy from gson/pom.xml
copy to gson/gson-shaded/pom.xml
index 949fb15..47ebd21 100644
--- a/gson/pom.xml
+++ b/gson/gson-shaded/pom.xml
@@ -23,7 +23,7 @@
     <artifactId>jclouds-project</artifactId>
     <groupId>org.apache.jclouds</groupId>
     <version>2.2.0-SNAPSHOT</version>
-    <relativePath>../project/pom.xml</relativePath>
+    <relativePath>../../project/pom.xml</relativePath>
   </parent>
 
   <!-- 
@@ -32,9 +32,10 @@
     This is a temporal solution and we should try to remove the usages of the classes in
     there and remove this once that is done.
   -->
-  <artifactId>jclouds-gson</artifactId>
-  <name>jclouds gson copy without internal packages</name>
-  <packaging>bundle</packaging>
+  <artifactId>jclouds-gson-shaded</artifactId>
+  <name>jclouds-gson shaded library</name>
+  <description>jclouds-gson library with gson internal packages relocated</description>
+  <packaging>jar</packaging>
 
   <dependencies>
     <dependency>
diff --git a/gson/pom.xml b/gson/pom.xml
index 949fb15..51ba975 100644
--- a/gson/pom.xml
+++ b/gson/pom.xml
@@ -26,56 +26,21 @@
     <relativePath>../project/pom.xml</relativePath>
   </parent>
 
-  <!-- 
-    JCLOUDS-1166: This project relocates the 'com.google.gson.internal' package
-    so we can keep using its contents in OSGi environments.
-    This is a temporal solution and we should try to remove the usages of the classes in
-    there and remove this once that is done.
-  -->
-  <artifactId>jclouds-gson</artifactId>
-  <name>jclouds gson copy without internal packages</name>
-  <packaging>bundle</packaging>
+  <artifactId>jclouds-gson-modules</artifactId>
+  <name>jclouds gson modules</name>
+  <packaging>pom</packaging>
 
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-      <version>2.5</version>
-    </dependency>
-  </dependencies>
+  <!--
+    The maven-bundle-plugin computes the manifest based on the classes that actually exist in
+    the classpath, but the maven-shade-plugin, runs after the bundle plugin. This results in the generated
+    manifest file not having the exports for the packages that have been relocated.
+    There are several threads on stackoverflow and others trying to make both plugins work together nicely but
+    none of the combinations work in our use case.
+    To overcome this, we generate both separately; first the shaded jar, then the bundle based on that jar. 
+  -->
+  <modules>
+    <module>gson-shaded</module>
+    <module>gson-bundle</module>
+  </modules>
 
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>2.2</version>
-        <executions>
-          <execution>
-            <id>shade</id>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <artifactSet>
-            <includes>
-              <include>com.google.code.gson:gson</include>
-            </includes>
-          </artifactSet>
-          <relocations>
-            <relocation>
-              <pattern>com.google.gson.internal</pattern>
-              <shadedPattern>org.jclouds.json.gson.internal</shadedPattern>
-            </relocation>
-          </relocations>
-          <transformers>
-            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-          </transformers>
-          <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
 </project>
diff --git a/project/pom.xml b/project/pom.xml
index 525cdac..f773132 100644
--- a/project/pom.xml
+++ b/project/pom.xml
@@ -270,8 +270,8 @@
             gson dependency as well. 
           -->
           <exclusion>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-gson-shaded</artifactId>
           </exclusion>
         </exclusions>
       </dependency>