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

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

commit d82868cc4706006bbaa025b9eff918bbcc55ef1b
Author: gurkerl83 <[email protected]>
AuthorDate: Thu Jun 25 15:27:15 2020 +0200

    Replace embedded and repackaged GSON library
    
    Replace substituted GSON package names with those provided from the vendor.
    Reduce OSGi-metadata declaration of core-module because the artificial 
package org.jclouds.json.gson.internal was removed.
    Remove the Gson module its children Gson bundle, and Gson shaded.
    Remove duplication conflict and check-style rules due to the removal of the 
internal Gson module.
    Add maven repository where a custom version of the Gson library gets 
hosted, which exports all packages.
    
    Remove particular repository
    
    Remove the declaration of the repository that serves a custom build GSON 
version. The build uses GSON in its original form of the vendor, which gets 
distributed through the standard distribution channel. The identifiers for 
group, artifact, and version correspond to the latest stable release of GSON.
    
    Integrate GSON library in Clouds Core Bundle
    
    The change contained in the commit puts the GSON library into the classpath 
of the JClouds core module.
    After several tests with Karaf and Karaf JClouds, especially if the Maven 
identifier matches the original GSON library, there are only a limited number 
of ways to keep the deployment effort low.
    
    Specifically, Karaf has a set of predefined Maven repositories that can be 
easily customized. The order in which a particular repository is resolved into 
the customized GSON library is more difficult. In normal OSGi applications, 
which do not have such a management function, I imagine this configuration to 
be more complicated.  Sure, a unique identifier would help, but then we are 
back to step 1.
    
    Although I honestly don't like to see this kind of approach in a codebase 
I'm working with, there are not many alternatives to the main aspect of 
deployment mentioned above.
    
    Maybe the approach can still ease the problem in the short term. In a 
further mid-term step, however, this problem must be addressed in general.
---
 .../org/jclouds/chef/config/ChefParserModule.java  |  2 +-
 core/pom.xml                                       |  6 +-
 .../java/org/jclouds/json/config/GsonModule.java   |  6 +-
 ...ConstructorAndReflectiveTypeAdapterFactory.java |  8 +--
 .../NullFilteringTypeAdapterFactories.java         |  4 +-
 .../json/internal/NullHackJsonLiteralAdapter.java  |  2 +-
 ...tructorAndReflectiveTypeAdapterFactoryTest.java |  4 +-
 gson/gson-bundle/pom.xml                           | 51 --------------
 gson/gson-shaded/pom.xml                           | 82 ----------------------
 gson/pom.xml                                       | 46 ------------
 pom.xml                                            |  1 -
 project/pom.xml                                    | 50 ++-----------
 resources/checkstyle.xml                           |  2 +-
 13 files changed, 24 insertions(+), 240 deletions(-)

diff --git 
a/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java 
b/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java
index fac073b..5d1fa13 100644
--- a/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java
+++ b/apis/chef/src/main/java/org/jclouds/chef/config/ChefParserModule.java
@@ -37,7 +37,7 @@ import org.jclouds.crypto.Crypto;
 import org.jclouds.crypto.Pems;
 import org.jclouds.json.config.GsonModule.DateAdapter;
 import org.jclouds.json.config.GsonModule.Iso8601DateAdapter;
-import org.jclouds.json.gson.internal.JsonReaderInternalAccess;
+import com.google.gson.internal.JsonReaderInternalAccess;
 import org.jclouds.json.internal.NullFilteringTypeAdapterFactories;
 import 
org.jclouds.json.internal.NullFilteringTypeAdapterFactories.MapTypeAdapterFactory;
 import org.jclouds.json.internal.NullHackJsonLiteralAdapter;
diff --git a/core/pom.xml b/core/pom.xml
index c9dcb7c..b27bd0e 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -41,9 +41,9 @@
     <jclouds.osgi.import>*</jclouds.osgi.import>
     <!-- https://issues.apache.org/jira/browse/JCLOUDS-1529 -->
     <jclouds.osgi.export>
-      !org.jclouds.json.gson.internal*,
       org.jclouds*;version=${project.version};-noimport:=true
     </jclouds.osgi.export>
+    
<jclouds.osgi.include>lib/gson-${gson.version}.jar=gson-${gson.version}.jar;lib:=true</jclouds.osgi.include>
     <jclouds.osgi.activator>org.jclouds.osgi.Activator</jclouds.osgi.activator>
   </properties>
 
@@ -82,8 +82,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-gson</artifactId>
+      <groupId>com.google.code.gson</groupId>
+      <artifactId>gson</artifactId>
     </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
diff --git a/core/src/main/java/org/jclouds/json/config/GsonModule.java 
b/core/src/main/java/org/jclouds/json/config/GsonModule.java
index ebe8cf1..531f4ea 100644
--- a/core/src/main/java/org/jclouds/json/config/GsonModule.java
+++ b/core/src/main/java/org/jclouds/json/config/GsonModule.java
@@ -37,9 +37,9 @@ import org.jclouds.domain.JsonBall;
 import org.jclouds.domain.LoginCredentials;
 import org.jclouds.json.Json;
 import org.jclouds.json.SerializedNames;
-import org.jclouds.json.gson.internal.ConstructorConstructor;
-import org.jclouds.json.gson.internal.Excluder;
-import org.jclouds.json.gson.internal.JsonReaderInternalAccess;
+import com.google.gson.internal.ConstructorConstructor;
+import com.google.gson.internal.Excluder;
+import com.google.gson.internal.JsonReaderInternalAccess;
 import 
org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory;
 import org.jclouds.json.internal.EnumTypeAdapterThatReturnsFromValue;
 import org.jclouds.json.internal.GsonWrapper;
diff --git 
a/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
 
b/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
index e20112e..3160e91 100644
--- 
a/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
+++ 
b/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
@@ -26,10 +26,10 @@ import java.lang.reflect.Modifier;
 import java.util.List;
 import java.util.Map;
 
-import 
org.jclouds.json.gson.internal.bind.JsonAdapterAnnotationTypeAdapterFactory;
-import org.jclouds.json.gson.internal.ConstructorConstructor;
-import org.jclouds.json.gson.internal.Excluder;
-import org.jclouds.json.gson.internal.bind.ReflectiveTypeAdapterFactory;
+import com.google.gson.internal.bind.JsonAdapterAnnotationTypeAdapterFactory;
+import com.google.gson.internal.ConstructorConstructor;
+import com.google.gson.internal.Excluder;
+import com.google.gson.internal.bind.ReflectiveTypeAdapterFactory;
 import 
org.jclouds.json.internal.NamingStrategies.AnnotationConstructorNamingStrategy;
 
 import com.google.common.base.MoreObjects;
diff --git 
a/core/src/main/java/org/jclouds/json/internal/NullFilteringTypeAdapterFactories.java
 
b/core/src/main/java/org/jclouds/json/internal/NullFilteringTypeAdapterFactories.java
index cdef883..135a0c0 100644
--- 
a/core/src/main/java/org/jclouds/json/internal/NullFilteringTypeAdapterFactories.java
+++ 
b/core/src/main/java/org/jclouds/json/internal/NullFilteringTypeAdapterFactories.java
@@ -28,7 +28,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.jclouds.json.gson.internal.JsonReaderInternalAccess;
+import com.google.gson.internal.JsonReaderInternalAccess;
 
 import com.google.common.base.Objects;
 import com.google.common.collect.FluentIterable;
@@ -56,7 +56,7 @@ public class NullFilteringTypeAdapterFactories {
    }
 
    static <T> TypeToken<?> resolve(TypeToken<T> ownerType, Type param) {
-      return 
TypeToken.get(org.jclouds.json.gson.internal.$Gson$Types.resolve(ownerType.getType(),
 ownerType.getRawType(),
+      return 
TypeToken.get(com.google.gson.internal.$Gson$Types.resolve(ownerType.getType(), 
ownerType.getRawType(),
             param));
    }
 
diff --git 
a/core/src/main/java/org/jclouds/json/internal/NullHackJsonLiteralAdapter.java 
b/core/src/main/java/org/jclouds/json/internal/NullHackJsonLiteralAdapter.java
index e1f8909..f8935df 100644
--- 
a/core/src/main/java/org/jclouds/json/internal/NullHackJsonLiteralAdapter.java
+++ 
b/core/src/main/java/org/jclouds/json/internal/NullHackJsonLiteralAdapter.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 import java.io.Writer;
 import java.lang.reflect.Field;
 
-import org.jclouds.json.gson.internal.bind.TypeAdapters;
+import com.google.gson.internal.bind.TypeAdapters;
 
 import com.google.common.base.Throwables;
 import com.google.gson.TypeAdapter;
diff --git 
a/core/src/test/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactoryTest.java
 
b/core/src/test/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactoryTest.java
index 8b6ce9c..ac453ce 100644
--- 
a/core/src/test/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactoryTest.java
+++ 
b/core/src/test/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactoryTest.java
@@ -31,8 +31,8 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.jclouds.json.SerializedNames;
-import org.jclouds.json.gson.internal.ConstructorConstructor;
-import org.jclouds.json.gson.internal.Excluder;
+import com.google.gson.internal.ConstructorConstructor;
+import com.google.gson.internal.Excluder;
 import 
org.jclouds.json.internal.NamingStrategies.AnnotationConstructorNamingStrategy;
 import 
org.jclouds.json.internal.NamingStrategies.AnnotationOrNameFieldNamingStrategy;
 import org.jclouds.json.internal.NamingStrategies.ExtractNamed;
diff --git a/gson/gson-bundle/pom.xml b/gson/gson-bundle/pom.xml
deleted file mode 100644
index 5970629..0000000
--- a/gson/gson-bundle/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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.3.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/gson-shaded/pom.xml b/gson/gson-shaded/pom.xml
deleted file mode 100644
index bef4550..0000000
--- a/gson/gson-shaded/pom.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?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.3.0-SNAPSHOT</version>
-    <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-shaded</artifactId>
-  <name>jclouds-gson shaded library</name>
-  <description>jclouds-gson library with gson internal packages 
relocated</description>
-  <packaging>jar</packaging>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-      <version>2.8.5</version>
-    </dependency>
-  </dependencies>
-
-  <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/gson/pom.xml b/gson/pom.xml
deleted file mode 100644
index 4fed9d8..0000000
--- a/gson/pom.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.3.0-SNAPSHOT</version>
-    <relativePath>../project/pom.xml</relativePath>
-  </parent>
-
-  <artifactId>jclouds-gson-modules</artifactId>
-  <name>jclouds gson modules</name>
-  <packaging>pom</packaging>
-
-  <!--
-    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>
-
-</project>
diff --git a/pom.xml b/pom.xml
index 155453e..4cab1eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,6 @@
   <modules>
     <module>project</module>
     <module>resources</module>
-    <module>gson</module>
     <module>core</module>
     <module>common</module>
     <module>compute</module>
diff --git a/project/pom.xml b/project/pom.xml
index b6a2e39..1b47901 100644
--- a/project/pom.xml
+++ b/project/pom.xml
@@ -225,6 +225,8 @@
     <guava.version>22.0</guava.version>
     
<guava.osgi.import>com.google.common.*;version="[22.0,30.0.0)"</guava.osgi.import>
     <guice.version>4.2.3</guice.version>
+    <gson.version>2.8.6</gson.version>
+    <guice.version>3.0</guice.version>
     <okhttp.version>2.2.0</okhttp.version>
     <okio.osgi.import>okio;version="[1.2.0,1.3)"</okio.osgi.import>
     <surefire.version>2.17</surefire.version>
@@ -255,25 +257,10 @@
         <version>${guava.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.jclouds</groupId>
-        <artifactId>jclouds-gson</artifactId>
-        <version>${project.version}</version>
-        <exclusions>
-          <!--
-            Due to the following issues:
-              https://issues.apache.org/jira/browse/MSHADE-206
-              https://issues.apache.org/jira/browse/MNG-5899
-            The Maven reactor ignores the reduced pom.xml generated by the 
shade plugin, and all
-            the dependencies that are shaded are included as normal 
dependencies too, causing
-            duplicate class issues.
-            This exclusion makes sure projects including the shaded version 
don't get the original
-            gson dependency as well. 
-          -->
-          <exclusion>
-            <groupId>org.apache.jclouds</groupId>
-            <artifactId>jclouds-gson-shaded</artifactId>
-          </exclusion>
-        </exclusions>
+        <groupId>com.google.code.gson</groupId>
+        <artifactId>gson</artifactId>
+        <version>${gson.version}</version>
+        <scope>provided</scope>
       </dependency>
       <dependency>
         <groupId>com.google.code.findbugs</groupId>
@@ -641,6 +628,7 @@
             
<Import-Package>${guava.osgi.import},${jclouds.osgi.import}</Import-Package>
             
<DynamicImport-Package>${jclouds.osgi.dynamic}</DynamicImport-Package>
             <Fragment-Host>${jclouds.osgi.fragment}</Fragment-Host>
+            <Include-Resource>${jclouds.osgi.include}</Include-Resource>
           </instructions>
         </configuration>
       </plugin>
@@ -1140,30 +1128,6 @@
                   <package>com.jcraft.jsch.agentproxy</package>
                 </packages>
               </exception>
-              <!--
-                TODO: Remove this when the issues are fixed or we have 
completely moved away from
-                      gson.internal
-                Due to the following issues:
-                  https://issues.apache.org/jira/browse/MSHADE-206
-                  https://issues.apache.org/jira/browse/MNG-5899
-                The contents of the shaded gson jar are directly included as 
part of jclouds-core.
-                The classes are exactly the same, so it is safe to exclude 
them here.
-              -->
-              <exception>
-                <conflictingDependencies>
-                  <dependency>
-                    <groupId>org.apache.jclouds</groupId>
-                    <artifactId>jclouds-core</artifactId>
-                  </dependency>
-                  <dependency>
-                    <groupId>org.apache.jclouds</groupId>
-                    <artifactId>jclouds-gson</artifactId>
-                  </dependency>
-                </conflictingDependencies>
-                <packages>
-                  <package>org.jclouds.json.gson.internal</package>
-                </packages>
-              </exception>
             </exceptions>
             <ignoredResourcePatterns>
               <!-- For all the jetty packages -->
diff --git a/resources/checkstyle.xml b/resources/checkstyle.xml
index d686ac7..395ba67 100644
--- a/resources/checkstyle.xml
+++ b/resources/checkstyle.xml
@@ -57,7 +57,7 @@
         </module>
         <module name="IllegalImport">
             <!-- Avoid importing AutoValue shaded packages such as Guava -->
-            <property name="illegalPkgs" 
value="sun,autovalue,org.testng.internal,com.google.gson.internal"/>
+            <property name="illegalPkgs" 
value="sun,autovalue,org.testng.internal"/>
         </module>
         <module name="WhitespaceAfter">
             <!-- TYPECAST disabled -->

Reply via email to