Spark игнорирует переопределенные библиотеки, вместо этого используя предоставленные - PullRequest
0 голосов
/ 26 марта 2020

Я создал задание Spark, для работы которого требуется более новая версия commons-compress. Я добавил это к pom.xml:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.20</version>
</dependency>

И я использую maven-shade-plugin, чтобы запечь библиотеку в моей получившейся банке.

Однако, когда я хочу использовать вещи из этого библиотека, я все еще получаю:

java.lang.NoSuchMethodError: org.apache.commons.compress.archivers.sevenz.SevenZFile.<init>(Ljava/nio/channels/SeekableByteChannel;)V

Кажется, он использует (более старый) commons-compress, который использует Spark, но игнорирует тот, который я испек в свою банку.

Как я могу сказать Спарк, чтобы использовать вместо этого мою более современную версию?

1 Ответ

2 голосов
/ 26 марта 2020

В этом типе сценария мне повезло, используя плагин shade, чтобы фактически переместить классы в более новую банку.

Что действительно происходит, так это то, что более новая версия JAR-файл находится под другим иерархическим именем, и плагин Shade автоматически перезаписывает все ссылки на этот новый JAR-файл в вашем байт-коде. В прошлом это работало довольно хорошо, чтобы избежать конфликтов версий зависимостей.

Измените конфигурацию вашего плагина maven shade с помощью перемещения, аналогичного приведенному ниже. Вам также необходимо убедиться, что установлена ​​более новая версия банки (похоже, вы уже сделали это).

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.2</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <relocations>
              <relocation>
                <pattern>org.apache.commons</pattern>
                <shadedPattern>org.shaded.apache.commons</shadedPattern>
              </relocation>
            </relocations>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...