Правильный способ исключения зависимостей maven из .war - PullRequest
2 голосов
/ 30 апреля 2011

У меня есть мультимодульный проект Maven в Eclipse. У него есть один jar-модуль «myapp-core» и несколько модулей .war. Основной модуль зависит от некоторых внешних jar, а военные модули зависят от ядра.

Проблема в том, что при сборке файлов .war все зависимости копируются во все папки WEB-INF / lib, поэтому у нас есть дубликаты. Теоретически, правильный способ решения проблемы - дать зависимостям в myapp-core область «предоставлено». К сожалению, когда я делаю это, все модули .war получают ошибки компиляции. И все переходные зависимости все равно копируются!

Как настроить его таким образом, чтобы исключить зависимости, общие для всех войн?

(К сожалению, я не могу исключить все переходные артефакты по одному. Их около 50, и это постоянно меняющийся список.)

Ответы [ 2 ]

1 голос
/ 26 ноября 2013

Вы можете исключить и включить артефакты, используя разделы конфигурации

 <project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <!--
            Exclude JCL and LOG4J since all logging should go through SLF4J.
            Note that we're excluding log4j-<version>.jar but keeping
            log4j-over-slf4j-<version>.jar
          -->
          <packagingExcludes>
            WEB-INF/lib/commons-logging-*.jar,
            %regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar]
          </packagingExcludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

, для справки см. здесь

1 голос
/ 05 мая 2011

Вместо «предоставлено» вы можете исключить определенные переходные зависимости, которые извлекаются определенными артефактами, и позволить другим зависимостям оставаться.Например,

X -depends-> B1 -depends-> C1
Y -depends-> B2 -depends-> C2 -depends-> D1

Затем настройте пом, чтобы X исключал B1.Затем вы получите самый последний и самый лучший B и последний C (при условии, что B2 - более новая версия B1, а C2 - более новая версия C1).Кроме того, вы можете объявить D1 зависимостью или пометить ее как «предоставленную».

См. mvnref-book / dependencies для дополнительных примеров, а также другие вопросы об обмене стеками Q & A здесь

...