Maven: как удалить локальный переопределяющий класс и скомпилировать с исходным классом в зависимости, когда shade упаковывает проект в jar

Я создаю класс A с тем же именем и пакетом, что и B в liblib, чтобы переопределить B, когда я запускаю программу spark локально, чтобы помочь мне отладить программу.

Мне также нужно затенить пакет программы в jar с зависимостями для загрузки на сервер для запуска программы spark в кластере.

Проблема заключается в том, что каждый раз, когда я затеняю пакет программы, мне нужно сначала удалить локально определенный класс А, иначе, когда я запускаю упакованный jar затенения в кластере, исключение приведет к сбою всего процесса:

User class threw exception: java.lang.NoSuchMethodError: A.fun1.

И в следующий раз, когда мне нужно отладить программу локально, мне нужно снова добавить класс А. Это немного раздражает.

Интересно, может ли Maven помочь мне удалить локальный переопределяющий класс A и скомпилировать с исходным классом B при формировании пакета проекта, в то же время позволяя мне запускать и отлаживать программу локально с локальным классом A переопределяющим классом B в spark.

FYI:

  1. Я использую IntelliJ IDEA и Maven 3.
  2. Класс A, определенный локально, и класс B в liblib имеют абсолютно одинаковые имя класса, имя пакета, имена функций и параметры.
  3. Я попробовал это, и это не сработало:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <id>uber-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <finalName>${project.artifactId}-${project.version}-jar-with-dependencies</finalName>
                        <filters>
                            <filter>
                                <artifact>${project.groupId}:${project.artifactId}</artifact>
                                <excludes>
                                    <exclude>package-of-classA/classA.*</include>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    

    и отчеты:

"Пользовательский класс сгенерировал исключение: java.lang.NoSuchMethodError: A.fun1."

0 ответов

Другие вопросы по тегам