Как разрешить зависимости, когда один модуль зависит от другого? - PullRequest
0 голосов
/ 20 мая 2018

У меня есть многоканальный проект 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>

Когда я запускаю толстую банку модуля B, я получаю ошибку ClassNotFound, и класс - ModuleЗависимость С(HiveConf)

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

После добавления этой зависимости в B она работает.

Я не думаю, что это правильный путь.Как модуль B может справляться с зависимостями в модуле C?

THX

1 Ответ

0 голосов
/ 20 мая 2018

Я допустил ошибку.

В pom.xml модуля C (utils) отсутствует зависимость hadoop-mapreduce-client-core

Теперь это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...