Вопрос по inheritance, maven, java – Maven включает родительские классы

6

У меня довольно простой Java-проект, созданный с использованием технологии mavenisized, но я не могу разобраться с ним.

Мой родительский модуль определяет множество Java-классов (и зависимостей), которые, как я ожидаю, будут полезны для нескольких дочерних модулей. Один из дочерних модулей предназначен для развертывания веб-приложения, поэтому ему нужно несколько дополнительных классов (сервлетов), а также все из родительского модуля.

Структура файла выглядит следующим образом

 - parent
   - src
   - pom.xml
   - child
     - src
     - pom.xml

Мой родительский пом выглядит так:

<project>
  <groupId>my.group</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1</version>
  <packaging>pom</packaging>

  ...

  <modules>
    <module>child</module>
  </modules>
</project> 

И ребенок выглядит так:

<project>
  <artifactId>child</artifactId>
  <packaging>war</packaging>
  <parent>
    <artifactId>parent</artifactId>
    <groupId>my.group</groupId>
    <version>0.0.1</version>
  </parent>

  ...

</project>

Это все, что мне нужно, чтобы ребенок знал о классах и зависимостях, определенных в parent? Похоже, это не так: eclipse выдает ошибки компиляции и выполняетmvn clean package из результатов родительской папки или дочерней папки & quot; не удается найти символ & quot; сообщения каждый раз, когда упоминается класс от родителя.

Что я делаю неправильно?

Ваш Ответ

4   ответа
1

чтобы он был знаком с его родителем

<dependency>
   <groupId>my.group</groupId>
   <artifactId>parent</artifactId>
   <version>0.0.1</version>
</dependency>
3

Поскольку упаковка вашего родительского модуля является "pom", файл jar предоставлен не будет, и файл .class из этого не будет доступен для других модулей. Попробуйте изменить его на «jar» и дать ему еще одну попытку.

Хотя это не очень хорошая практика, чтобы иметь родителя в качестве «jar». Я придерживаюсь "пом" родитель и, вероятно, создать новое «ядро» или "общий" дитя и сделай мою "войну" зависит от этого.

Error: User Rate Limit Exceeded Dave
Error: User Rate Limit Exceeded
0

Первое, что вы должны сделать, это определить ваши зависимости внутриdependencyManagmeent заблокировать в вашем родителе, как это:

<dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-a</artifactId>
       <version>1.0</version>
     </dependency>
     ...
   </dependencies>
</dependencyManagement>

и, кроме того, в своем ребенке вы должны сказать, какую зависимость ваш ребенок хотел бы использовать в качестве зависимости:

   <dependencies>
     <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-a</artifactId>
       <!-- No version given. See dependencyManagement -->
     </dependency>
     ...
   </dependencies>
14

Я бы изменил структуру вашего проекта следующим образом:

  • parent (pom)
    • core (jar, with all the classes that used to be in parent)
    • child (war, depends on core)

родитель:

<project>
  <groupId>my.group</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1</version>
  <packaging>pom</packaging>

  <modules>
    <module>core</module>
    <module>child</module>
    <!-- possibly more modules... -->
  </modules>
</project>

Core:

<project>
  <parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1</version>
  </parent>
  <artifactId>core</artifactId>
  <packaging>jar</packaging>
</project>

Ребенок:

<project>
  <parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1</version>
  </parent>
  <artifactId>module1</artifactId>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>my.group</groupId>
      <artifactId>core</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>
Кроме того, вам нужно будет выполнить mvn clean install основной проект, прежде чем вы сможете собрать дочерний
ура, эта установка работала хорошо. Dave
Я & APOS; дmvn clean install на родительском элементе, поэтому все модули создаются автоматически в правильном порядке на основе зависимостей.

Похожие вопросы