Maven Shared Dependency - PullRequest
       24

Maven Shared Dependency

0 голосов
/ 16 декабря 2011

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

|-mainProject
|-webProject

, где mainProject имеет webProject в качестве зависимости (упаковка пакетов). Ошибка, так как webProject также зависит от mainProject, поэтому я изменил структуру

|-coreProject
|-mainProject
|-webProject

так, чтобы ядро ​​было упаковано в jar-файл, а ядро ​​main и web было зависимым. Теперь я вижу другую ошибку при создании -shade.jar.

Компоненты CoreProject должны использоваться как основными, так и веб-проектами. Какова будет лучшая практика в этом случае?


мой график зависимостей выглядит как

mainProject(jar) -> webProject(war)   --
                |-> coreProject(jar) <-|
                |-> jetty jars

Я использую встроенный джет в mainProject, так что мой конечный результат будет один файл JAR из mainProject, который включает в себя web & coreProjects.

[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-shade-plugin: 1.4: shade (по умолчанию) в проекте mainProject: Ошибка при создании затененной банки: Неверный дайджест файла подписи для основных атрибутов Manifest -> [Помощь 1]

Я пробовал фильтры, такие как

<filters>
   <filter>
      <artifact>*:*</artifact>
      <excludes>
         <exclude>META-INF/*.SF</exclude>
         <exclude>META-INF/*.DSA</exclude>
         <exclude>META-INF/*.RSA</exclude>
      </excludes>
   </filter>
</filters>

но все равно получаю ту же ошибку

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Весьма необычно иметь WAR-проект в качестве зависимости для другого проекта, как вы описали.Допустимый сценарий, который я могу придумать - это объединить WAR в архив более высокого уровня (например, EAR).Но в этом случае ваша зависимость определяется в вашем EAR-проекте, а не наоборот.В любом случае, если вы хотите следовать рекомендациям, поместите ваши основные классы в mainProject и установите для packaging значение JAR.Затем добавьте для него зависимость в webProject.

. Если и mainProject, и webProject всегда будут развернуты вместе, вы должны определить их как подмодули в многомодульной POM

0 голосов
/ 16 декабря 2011

Компоненты CoreProject должны использоваться как основными, так и веб-проектами. Какова будет лучшая практика в этом случае?

Если CoreProject состоит из классов Java, но не содержит веб-содержимого, сделайте его проектом JAR.

Если в CoreProject также есть веб-содержимое (т. Е. Содержимое принадлежит WAR, а не JAR), то вы можете сделать это проектом WAR, и другие два проекта WAR будут включать его, используя наложение файла WAR. Вы можете прочитать больше об этом здесь .

Конечно, циклические зависимости проблематичны в Maven. Вам либо нужно разорвать цикл (реорганизовав вещи), либо вытащить все это в один артефакт Maven.

...