Библиотека оттенков Maven с зависимостями - PullRequest
0 голосов
/ 03 февраля 2020

Я хочу полностью перераспределить все пакеты одной библиотеки с некоторыми из ее зависимостей (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 является выигрышной?

...