Я хочу полностью перераспределить все пакеты одной библиотеки с некоторыми из ее зависимостей (http client et c.) И использовать ее как одну однотонную зависимость (чтобы избежать всех конфликтов в пути к классам в сложном проекте).
Цель (обратите внимание на затененный префикс):
import shaded.com.amazonaws.auth.AWSStaticCredentialsProvider;
import shaded.com.amazonaws.auth.BasicAWSCredentials;
import shaded.com.amazonaws.client.builder.AwsClientBuilder;
import shaded.com.amazonaws.regions.Regions;
import shaded.com.amazonaws.services.s3.AmazonS3;
import shaded.com.amazonaws.services.s3.AmazonS3ClientBuilder;
import shaded.com.amazonaws.services.s3.model.Bucket;
import shaded.com.amazonaws.services.s3.model.S3ObjectSummary;
...
private AmazonS3 createClient() {
return AmazonS3ClientBuilder.standard()
.withCredentials(
new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(endPoint, Regions.EU_CENTRAL_1.getName()))
.build();
}
}
pom. xml использование:
...
<dependency>
<groupId>my.shaded</groupId>
<artifactId>amazonaws-shaded</artifactId>
<version>1.0.0</version>
</dependency>
...
Текущий pom проекта перераспределения затенения:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>my.shaded</groupId>
<artifactId>amazonaws-shaded</artifactId>
<version>1.0.0</version>
<properties>
<com.amazonaws.aws-java-sdk-s3.version>1.11.711</com.amazonaws.aws-java-sdk-s3.version>
</properties>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>${com.amazonaws.aws-java-sdk-s3.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadeSourcesContent>true</shadeSourcesContent>
<relocations>
<relocation>
<pattern>org.apache.http</pattern>
<shadedPattern>shaded.org.apache.http</shadedPattern>
</relocation>
<relocation>
<pattern>org.apache.httpcomponents</pattern>
<shadedPattern>shaded.org.apache.httpcomponents</shadedPattern>
</relocation>
<relocation>
<pattern>com.amazonaws</pattern>
<shadedPattern>shaded.com.amazonaws</shadedPattern>
</relocation>
</relocations>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Несмотря на то, что мой jar содержит перераспределенный класс shaded/com/amazonaws/services/s3/AmazonS3.class
(jar tf
), в проекте, который использует его в качестве зависимости, это ошибка компиляции. Есть идеи, какая конфигурация плагина Shade является выигрышной?