Java 当一个模块依赖于另一个模块时,如何解决依赖关系?
我有一个maven多模块项目Java 当一个模块依赖于另一个模块时,如何解决依赖关系?,java,scala,maven,Java,Scala,Maven,我有一个maven多模块项目 A: parent. B: app. C: utils. 在模块B中,我用下面的配置制作了一个胖罐子 <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.0</version> <configuration> <archive>
A: parent.
B: app.
C: utils.
在模块B中,我用下面的配置制作了一个胖罐子
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.xxx.MainRun</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven汇编插件
3.1.0
com.xxx.mainlun
带有依赖项的jar
组装
包裹
单一的
当我运行模块B的fat jar时,我得到一个ClassNotFound错误,该类是模块C的依赖项。(HiveConf)
线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/hadoop/mapreduce/TaskAttemptContext
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:264)
位于org.apache.hadoop.hive.shimmers.ShimLoader.createShim(ShimLoader.java:146)
位于org.apache.hadoop.hive.shimmers.ShimLoader.loadshimmers(ShimLoader.java:141)
位于org.apache.hadoop.hive.shimmers.ShimLoader.gethadoopshimmers(ShimLoader.java:100)
位于org.apache.hadoop.hive.conf.HiveConf$ConfVars(HiveConf.java:373)
位于org.apache.hadoop.hive.conf.HiveConf.(HiveConf.java:108)
原因:java.lang.ClassNotFoundException:org.apache.hadoop.mapreduce.TaskAttemptContext
位于java.net.URLClassLoader.findClass(URLClassLoader.java:381)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 还有18个
在我将这个依赖项添加到B中之后,它就可以工作了
我认为这不是正确的方法。模块B如何处理模块C中的依赖关系
我犯了一个错误
模块C(utils)的pom.xml缺少依赖关系hadoop mapreduce客户端核心
现在可以了
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/TaskAttemptContext
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.hadoop.hive.shims.ShimLoader.createShim(ShimLoader.java:146)
at org.apache.hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java:141)
at org.apache.hadoop.hive.shims.ShimLoader.getHadoopShims(ShimLoader.java:100)
at org.apache.hadoop.hive.conf.HiveConf$ConfVars.<clinit>(HiveConf.java:373)
at org.apache.hadoop.hive.conf.HiveConf.<clinit>(HiveConf.java:108)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.TaskAttemptContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 18 more