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:
- Я использую IntelliJ IDEA и Maven 3.
- Класс A, определенный локально, и класс B в liblib имеют абсолютно одинаковые имя класса, имя пакета, имена функций и параметры.
Я попробовал это, и это не сработало:
<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."