java - Maven:当shade将项目打包到jar时,如何删除本地覆盖类并使用依赖项中的原始类进行编译
问题描述
我在spark lib中创建了一个与B同名的类A,在本地运行spark程序时覆盖B,以帮助我调试程序。
我还需要将程序隐藏到具有依赖项的 jar 中,以上传到服务器以在集群中运行 spark 程序。
问题是,每次对程序进行shade打包时,都需要先将本地定义的class A去掉,否则在集群中运行shade打包的jar时,会出现异常导致整个过程失败:
User class threw exception: java.lang.NoSuchMethodError: A.fun1.
下次我需要在本地调试程序时,我需要再次添加回 A 类。这有点烦人。
我想知道Maven是否可以帮助我在形状打包项目时删除本地覆盖类A并使用原始类B编译,同时仍然使我能够在本地运行和调试程序本地类A覆盖类B在spark中。
供参考:
- 我正在使用 IntelliJ IDEA 和 maven 3。
- 本地定义的 A 类和 spark lib 中的 B 类具有完全相同的类名、包名、函数名和参数。
我试过了,但没有用:
<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。”
解决方案
推荐阅读
- java - 如何将 RequestParam 值作为 URL
- r - R语言中数据框列值转换问题
- python - Python 在尝试清除 pyqt5 中的组合框时崩溃
- python - @property 作为外部包装/装饰的方法
- unity3d - 自顶向下 3D Raycast 到鼠标点
- react-native - 如何弯曲 react-navigation-material-bottom-tabs 的前两个角?
- python - 在 PyTorch 中将张量矢量化分配给切片
- jquery - 带有滑块和百分比显示的 Jquery 缩放
- neo4j - 查找接口方法的实现
- javascript - 获取未定义的值而不是返回的字符串?