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
This commit is contained in:
Ignasi Barrera 2019-06-21 10:38:36 +02:00 committed by GitHub
parent c6dc6951af
commit 753bd8d781
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 150 additions and 52 deletions

51
gson/gson-bundle/pom.xml Normal file
View File

@ -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>

82
gson/gson-shaded/pom.xml Normal file
View File

@ -0,0 +1,82 @@
<?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>
<!--
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.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>

View File

@ -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-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.
-->
<artifactId>jclouds-gson</artifactId>
<name>jclouds gson copy without internal packages</name>
<packaging>bundle</packaging>
<modules>
<module>gson-shaded</module>
<module>gson-bundle</module>
</modules>
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.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>

View File

@ -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>