mirror of https://github.com/apache/jclouds.git
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.
This commit is contained in:
parent
1cd28c93c4
commit
d82868cc47
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
46
gson/pom.xml
46
gson/pom.xml
|
@ -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>
|
1
pom.xml
1
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>
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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 -->
|
||||
|
|
Loading…
Reference in New Issue