2016-02-22 3 views
1

Я хочу использовать тень maven для создания затененной банки, но я также хотел бы включить специальную зависимость только в случае затененной банки (не в нормальных зависимостях компиляции моего проекта). Как я могу это сделать?Maven Включает зависимость только в затененной банке

С моей точки зрения, включение/исключение - это только белые списки/черные списки, поэтому я не могу явно заставить что-то включить, которое не было включено в фактический список зависимостей.

Для большего количества контекстов у меня есть зависимость JAR, которая содержит ресурс, который я хочу включить только в один из моих артефактов оттенков, но наличие этого jar в пути class иначе вызовет ошибки.

Чтобы быть ясным, я хочу создать как затененную банку, так и дополнительную зависимость и обычную банку без нее, в одном вызове mvn package.

+0

Затем исправьте свою ошибку. Честно говоря, чем проще, тем лучше. Использование профиля будет работать, но это сделает все более сложным, чем нужно. Избегайте обходных решений. Сделайте вашу жизнь легкой. – Tunaki

+0

Это не то, что вы можете «исправить». Это по своей сути взаимоисключающие конфигурации, содержащиеся в двух банках. Один из двоичных файлов, которые должны быть опубликованы, требует определенной конфигурации, другой - другой. Профили - это решение, а не обходное решение. –

ответ

2

Попробуйте использовать профиль и иметь свою зависимость и оттенок только в этом профиле. Например:

<profiles> 
    <profile> 
     <id>shadeProfile</id> 
     <dependencies> 
      <dependency> 
       <groupId>com.example</groupId> 
       <artifactId>some-artifact</artifactId> 
       <version>1.23</version> 
      </dependency> 
     </dependencies> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>2.3</version> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>shade</goal> 
          </goals> 
          <configuration> 
           <shadedClassifierName>shaded</shadedClassifierName> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Теперь, когда вы запускаете mvn -PshadeProfile package он будет включать в себя артефакт, как часть вашего затененной сборки, а также использовать классификатор shaded для нового артефакта. Таким образом, ваша сборка может создать ваш незатронутый JAR без проблемного ресурса и затененный JAR с этим ресурсом, просто включив профиль.

Другие проекты, которые зависят от этого, могут либо зависеть от затененного или незаштрихованного артефакта, если это необходимо, поскольку вы используете классификатор для генерации обоих.

+0

Спасибо, это в значительной степени то, что я искал, но возможно ли генерировать затененный артефакт всегда вместе с незаштрихованным и иметь затененный один, который включает эту зависимость. то есть. имеют два профиля (по умолчанию + заштрихованы), которые всегда выполняются? –

+0

Решение моего вопроса выше было использовать профили и установить его activeByDefault = true. Благодаря! –

+0

Рад, что вы поняли, что часть из них - не уверен, что я бы подумал, что это сработает. Я должен буду помнить это ... – dcsohl