Java 当一个模块依赖于另一个模块时,如何解决依赖关系?

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>

我有一个maven多模块项目

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