Локальная установка Maven MultiModule не обновляется

Project A
   --Module B    
      --pom.xml
   --Module C    
      --pom.xml    
pom.xml

Я работаю с многомодульным проектом, в котором проект A, модуль B и модуль C имеют свои собственные файлы pom. Модуль A и модуль B ссылаются на pom-файл ProjectA.

Я использую ModuleA как зависимость в файле pom модуля B.

Я добавил несколько пакетов в модуль A и выполнил чистую установку mvn.

Он обновил мой репозиторий .m2 последними изменениями, которые я сделал.

Затем я выполнил чистую установку mvn на модуле B, однако модуль B по-прежнему не распознает последние изменения в модуле A.

Я пробовал следующее, но у меня не работает

  1. Удаление папки .m2 и выполнение чистой установки maven
  2. Создание чистой установки mvn в корневой папке
  3. Использование Intellij, аннулирование кеша и перезапуск, включение моментальных снимков обновления и т. д.

person Karan Sharma    schedule 03.02.2020    source источник
comment
Пожалуйста, сделайте пример проекта на github и покажите, что именно не работает...   -  person khmarbaise    schedule 03.02.2020


Ответы (1)


Модуль A и модуль B ссылаются на pom-файл ProjectA.

ProjectA должен иметь упаковку "pom" и быть "агрегатором" других модулей. Его pom.xml должно выглядеть так:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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.foo.bar</groupId>
    <artifactId>myartifactname</artifactId>
    <version>0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
      <module>ModuleB</module>
      <module>ModuleC</module>
    </modules>
</project>

ProjectA не должен содержать никаких исходных файлов, поэтому не имеет смысла объявлять зависимость от него в модулях B и C.

Однако pom.xml модуля A может содержать определения, общие для всех модулей (например, конфигурации плагинов, свойства и т. д.). В этом случае вы можете использовать наследование в модулях B и C. Например, модули B и C (но не A) могут иметь «родительский» раздел, где они будут объявлять ProjectA как «родительский», следовательно, наследуя вышеупомянутые определения.

Я использую ModuleA как зависимость в файле pom модуля B.

Опять же, как я объяснил выше, это не имеет смысла. ProjectA не является java-модулем, и, поскольку он имеет pom-упаковку, нет реального артефакта (читай jar), который создается из этого модуля.

person Mark Bramnik    schedule 03.02.2020
comment
У меня есть теневой плагин для упаковки банки внутри модуля. - person Karan Sharma; 03.02.2020
comment
Плагин шейда может манипулировать артефактами (выводом сборки), но для этого вы должны сначала правильно построить артефакты... Я действительно предлагаю вам сначала попробовать конфигурацию, которую я объяснил, прежде чем использовать плагин шейда. - person Mark Bramnik; 03.02.2020