2015-11-20 7 views
1

Кажется, что в том числе прямые зависимости с областью provided хорошо понятны. Также представляется, что включение транзитивных зависимостей с областью runtime также легко выполняется.Плагин сборки Maven: как включить предоставленные зависимости транзитивных зависимостей

Но как я могу включить зависимость от двух уровней отвода?

Пример:

A --> B --> C 

где А зависит от В (компилировать объем) и В зависит от С (при условии, охват).

Я хочу, чтобы A извлекал C (например, загрузите банку локально), будь то через дескриптор сборки или maven-dependency-plugin:copy-dependencies или какой-либо другой механизм.

Я пробовал, казалось бы, любую комбинацию опций для обоих вышеупомянутых плагинов. Этот подход не охватывает ни один из подходов. Они оба получают B (даже если B изменяется на представленную зависимость), и любой компиляции зависимостей сферы применения B, но не предоставили зависимостей B.

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

Естественно, я не хочу, чтобы перечислять все зависимости B в A pom - я хотел бы получить (и затем упаковать) все зависимости неявно и рекурсивно.

ответ

0

Вы не сможете этого сделать. Это не ограничение maven-assembly-plugin, но способ, которым Maven рассматривает транзитивные зависимости. Транзитивная зависимость, которая имеет область provided, всегда будет опускаться (см. this table в документации).

Об этой ошибке (MNG-2205), но я не думаю, что она будет исправлена ​​в ближайшее время. Это действительно предназначенное поведение, поскольку зависимости provided зависят от имени, которое должно быть предоставлено во время выполнения.

0

Хотя Tunaki совершенно прав, я нашел работоспособное решение, которое лучше, чем ничего, используя менее известный плагин (Примечание: работает только с Maven < = 3.0.x)

Это определяет два блока зависимостей. Первый втягивает нормальные компиляционные отпечатки, включая транзитивные, это то же самое, что и использование зависимостей копирования. Второй блок конкретно упоминается B в дополнении к декларации в зависимости нормального п (к сожалению, но, по крайней мере, как зависимость упоминает в том же П) и просит его предоставленные DEPS:

 <plugin> 
      <groupId>com.github.goldin</groupId> 
      <artifactId>copy-maven-plugin</artifactId> 
      <version>0.2.5</version> 
      <executions> 
       <execution> 
        <id>get-provided-dependencies</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <resources> 
          <resource> 
           <targetPath>${project.build.directory}/lib</targetPath> 
           <dependencies> 
            <dependency> 
             <includeScope>compile</includeScope> 
            </dependency> 
            <dependency> 
             <groupId>some.group</groupId> 
             <artifactId>artifact_i_call_B</artifactId> 
             <version>1.0</version> 
             <includeScope>provided</includeScope> 
            </dependency> 
           </dependencies> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Документы для этого плагина может существовать только в в архиве на данный момент, не уверен, что с ним произошло: http://web.archive.org/web/20130826193436/http://evgeny-goldin.com/wiki/Copy-maven-plugin

Смежные вопросы