Мультимодульный проект Maven нарушает разрешение классов во время компиляции - PullRequest
1 голос
/ 13 июля 2010

Ранее я управлял 3-модульным проектом как 3 отдельных проекта maven. Поскольку этот проект продвигался вперед, я решил, что мне следует воспользоваться преимуществами управления зависимостями maven2, чтобы упростить интеграцию между этими 3 развивающимися модулями.

Я определил супер-проект, который развертывается как POM. Здесь определяются некоторые общие зависимости, а модули определяются в POM в порядке зависимости от наименее зависимого модуля к наиболее зависимому модулю. Каждый модуль имеет определение POM обратно к родителю, и там, где он применяется, существуют зависимости от одного модуля к развернутому артефакту другого модуля. В конце я добавлю, возможно, стоящие строки pom.xml.

Что касается проблемы, я вчера настроил этот проект и смог заставить каждый модуль собирать и работать самостоятельно. Затем я возвращаюсь сегодня, чтобы поработать над одним из модулей, теперь, когда появились новые требования, и вдруг все ломается. Я редактирую проекты в Eclipse, и каждый раз, когда я изменяю файл, он больше не может разрешить ни один из классов, определенных в том же проекте. То есть, если у меня есть класс foo.bar.class1 и у него есть объект foo.bar.class2, Eclipse (и компилятор в целом) жалуется, что не может разрешить класс foo.bar.class2 ... Теперь это поражает воображение, потому что этот другой класс находится в том же проекте и пакете. Аналогичные проблемы также существуют для классов, не входящих в тот же пакет.

Есть ли что-то сломанное в моей настройке maven, или у кого-нибудь есть идеи, почему эти проекты не могут даже разрешить классы в одном пакете ??

- :: РОМ :: -

Parent -> / path / to / project / mainApp

<modelVersion>4.0.0</modelVersion>
<groupId>com.moremagic</groupId>
<artifactId>mainApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Main App</name>

<modules>
    <module>Broker</module>
    <module>Soap</module>
    <module>UI</module>
</modules>

Брокер -> / путь / к / проекту / mainApp / Брокер

 <parent>
   <artifactId>mainApp</artifactId>
   <groupId>com.moremagic</groupId>
   <version>0.0.1-SNAPSHOT</version>
   <relativePath>../</relativePath>
 </parent>

 <modelVersion>4.0.0</modelVersion>

 <groupId>com.moremagic</groupId>
 <artifactId>Broker</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>

Soap -> / path / to / project / mainApp / Soap

<parent>
  <artifactId>mainApp</artifactId>
  <groupId>com.moremagic</groupId>
  <version>0.0.1-SNAPSHOT</version>
  <relativePath>../</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>

<groupId>com.moremagic</groupId>
<artifactId>SOAP</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

...

<dependency>
    <groupId>com.moremagic</groupId>
    <artifactId>Broker</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

...

UI -> / path / to / project / mainApp / UI

<parent>
  <artifactId>mainApp</artifactId>
  <groupId>com.moremagic</groupId>
  <version>0.0.1-SNAPSHOT</version>
  <relativePath>../</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>com.moremagic</groupId>
<artifactId>UI</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

...


<dependency>
  <groupId>com.moremagic</groupId>
  <artifactId>SOAP</artifactId>
  <version>1.0-SNAPSHOT</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>com.moremagic</groupId>
  <artifactId>Broker</artifactId>
  <version>1.0-SNAPSHOT</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

...

1 Ответ

2 голосов
/ 13 июля 2010

Похоже, проблема в настройке Eclipse, а не в Maven.

Работает ли mvn compile из командной строки в ваших проектах?Как из родительского проекта, так и из каждого отдельного модуля (после выполнения mvn install для зависимостей)?

Используете ли вы плагин Maven для Eclipse, например m2eclipse?Убедитесь, что он настроен для загрузки зависимых проектов из Eclipse, а не для поиска в хранилище («Включить разрешение рабочей области»).Что произойдет, если вы выполните Project> Clean, чтобы очистить все проекты?

...