Java Maven:当shade将项目打包到jar时,如何删除本地重写类并使用依赖项中的原始类进行编译
我在spark库中创建了一个与B具有相同名称和包的类a,以便在本地运行spark程序时覆盖B,从而帮助我调试程序 我还需要将程序包装到一个jar中,并将其与依赖项一起上载到服务器,以便在集群中运行spark程序 问题是,每次我对程序进行shade打包时,我都需要先删除本地定义的类A,否则,当我在集群中运行shade打包的jar时,整个过程都会出现异常:Java Maven:当shade将项目打包到jar时,如何删除本地重写类并使用依赖项中的原始类进行编译,java,maven,apache-spark,ant,maven-shade-plugin,Java,Maven,Apache Spark,Ant,Maven Shade Plugin,我在spark库中创建了一个与B具有相同名称和包的类a,以便在本地运行spark程序时覆盖B,从而帮助我调试程序 我还需要将程序包装到一个jar中,并将其与依赖项一起上载到服务器,以便在集群中运行spark程序 问题是,每次我对程序进行shade打包时,我都需要先删除本地定义的类A,否则,当我在集群中运行shade打包的jar时,整个过程都会出现异常: User class threw exception: java.lang.NoSuchMethodError: A.fun1. 下次我需要在
User class threw exception: java.lang.NoSuchMethodError: A.fun1.
下次我需要在本地调试程序时,我需要再次添加类A。这有点烦人
我想知道Maven是否可以帮助我在shape打包项目时删除本地重写类A并使用原始类B进行编译,同时仍然允许我在spark中使用本地类A重写类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>
org.apache.maven.plugins
maven阴影插件
2.4.3
优步罐
包裹
阴凉处
${project.artifactId}-${project.version}-jar与依赖项
${project.groupId}:${project.artifactId}
classA/classA包装*
和报告:你能解释一下为什么有这个本地重写类吗?听起来不对…@khmarbaise我需要重写spark中的一个类来读取本地文件存储中的模拟数据,而不是远程hadoop集群。我重写spark中的类,以避免在执行本地调试和远程包提交时修改程序代码。