Трехуровневый пом (компания - проект - модуль) - проблемы с модулем проекта (ов) - PullRequest
2 голосов
/ 25 марта 2012

Я использую Eclipse Indigo с m2e (который подключается к внешнему двоичному файлу Maven 3.0.3).

Прямо сейчас предполагаемая структура моего приложения выглядит следующим образом:

Company-parent
--Project-parent
----Module1
----Module2
----ModuleN

Я настроил свои poms так, чтобы Company-parent был проектом Project-parent, а Project-parent является родителем всех модулей. Компания-родитель и проект-родитель, кажется, в порядке. Оба имеют тип упаковки POM.

На третьем уровне я начинаю сталкиваться с проблемами. Я получаю множество ошибок maven и различного рода странное поведение, даже когда определены самые простые проекты модулей.

Родитель компании:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.scoresecret</groupId>
  <artifactId>scs-global-parent</artifactId>
  <version>1</version>
  <packaging>pom</packaging>

</project>

Родитель проекта:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>scs-global-parent</artifactId>
    <groupId>com.scoresecret</groupId>
    <version>1</version>
  </parent>

  <artifactId>scs-model-parent</artifactId>
  <groupId>com.scoresecret.model</groupId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>scs-model-core</module>
  </modules>

</project>

Модуль пом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>scs-model-parent</artifactId>
    <groupId>com.scoresecret.model</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>scs-model-core</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

Я не могу сделать «Maven -> Обновить конфигурацию проекта», потому что когда я это делаю, я получаю эту ошибку:

Failure to find org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3 in https://my.archiva.location/archiva/repository/internal was cached in the local repository, resolution will not be reattempted until the update interval of scs.internal has elapsed or updates are forced pom.xml /scs-model-core line 1  Maven Configuration Problem

Некоторые другие ошибки, которые я получаю:

Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.4.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.4.3 pom.xml /scs-model-core line 1  Maven Build Problem

Также получаю сообщение об ошибке m2e, игнорирующее одну из целей моего плагина (из pom уровня компании) в модуле. Я что-то упускаю здесь очевидное? Помогите!

Спасибо:)

Ответы [ 4 ]

3 голосов
/ 26 марта 2012

Вы не должны располагать артефакты, как вы описали в структуре каталогов.

+-- Company-parent (pom.xml)
      +-- Project-parent (pom.xml)
            +----Module1 (pom.xml)
            +----Module2 (pom.xml)
            +----ModuleN (pom.xml)

Чтобы по-настоящему эффективно использовать вашу компанию-родителя (pom.xml), она должна быть выделена в отдельную область в управлении версиями и выпущена отдельно в вашем менеджере репозитория (nexus, artifactory, archiva ...). Это приведет к следующей структуре:

+-- Company-parent (pom.xml) (Separate Project)

Компания-родитель должна выпускаться так часто, как это необходимо через релиз-плагин. Допустим, мы выпустили версию 1.0 компании-родителя. Причина его разделения заключается в том, что компания-родитель используется многими проектами, а не только одним проектом.

и реальные проекты должны быть помещены в отдельную папку (также в управлении версиями):

+-- Project-parent (pom.xml)
     +----Module1 (pom.xml)
     +----Module2 (pom.xml)
     +----ModuleN (pom.xml)

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

<project....>
 <modelVersion>4.0...</modelVersion>

<parent>
  <artifactId>company-parent</artifactId>
  <groupId>com.company.base</groupId>
  <version>1.0</version>
</parent>

<packaging>pom</packaging>

<groupId>com.company.project1</groupId>
<artifactId>project-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
...
<dependencyManagement>
 <!-- Project specific dependencies -->
</dependencyManagement>
<build>
  <pluginManagement>
    <plugins>
      <!-- Project specific plugins. Better use them of the company pom -->
    </plugins>
  </pluginManagement>
</build>
<modules>
  <module>module1</module>
  <module>module2</module>
  <module>moduleN</module>
</modules>
..

Теперь давайте взглянем на модуль, который должен выглядеть следующим образом:

<project....>
 <modelVersion>4.0...</modelVersion>

<parent>
  <artifactId>project-parent</artifactId>
  <groupId>com.company.project1</groupId>
  <version>1.0.0-SNAPSHOT</version>
</parent>

<packaging>jar</packaging>

<artifactId>module1</artifactId>

<dependencies>...</dependencies>
<build>..</build>
0 голосов
/ 25 марта 2012

Похоже, что maven не может загрузить плагин (org.apache.maven.plugins: maven-resources-plugin: pom: 2.4.3) из хранилища https://my.archiva.location/archiva/repository/internal

Не удалось найти org.apache.maven.plugins: maven-resources-plugin: pom: 2.4.3 в https://my.archiva.location/archiva/repository/internal, который был кэширован в локальном репозитории, разрешение не будет предприниматься повторно, пока интервал обновления scs.internal не будетистекло или принудительное обновление pom.xml / scs-model-core line 1 Проблема конфигурации Maven

Если вы просматриваете этот URL в браузере, существует ли он?Я вижу, что он использует https - вам нужен клиентский сертификат или какая-либо базовая учетная запись для доступа к этому URL-адресу?

Каковы ваши текущие настройки в шоу .m2 / settings.xml для репозиториев?Вы находитесь за брандмауэром компании или не подключены к Интернету, что вынуждает вас подключаться к нестандартному центральному хранилищу maven?

0 голосов
/ 25 марта 2012

Оказывается, мое локальное хранилище содержало файлы, которые заканчивались расширением ".lastUpdated" ... это было из-за проблем с аутентификацией, когда я пытался зашифровать свои maven-пароли, поэтому он не загружал зависимости,Я удалил эти файлы и просто запустил «Maven> Update Dependencies», и это не сработало, загрузив недостающие ресурсы из моего хранилища артефактов.

0 голосов
/ 25 марта 2012

Вы должны ссылаться на родительский pom с явным путем:

<parent>
  <artifactId>scs-model-parent</artifactId>
  <groupId>com.scoresecret.model</groupId>
  <version>1.0-SNAPSHOT</version>
  <relativePath>../pom.xml</relateivePath>
</parent>

В противном случае вам нужно переустанавливать родительский pom в хранилище каждый раз, когда вы его меняете.

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