Maven Включить зависимость только в затененной банке
Я хотел бы использовать maven shade для создания затененного фляги, но я также хотел бы включить специальную зависимость только в случае затененного фляги (не в обычные зависимости компиляции моего проекта). Как я могу пойти по этому поводу?
Насколько я понимаю, включает / исключает только белые / черные списки, поэтому я не могу явно принудительно включить что-то, что не было включено в фактический список зависимостей.
Для большего контекста у меня есть зависимость JAR, которая содержит ресурс, который я хочу включить только в один из моих артефактов затенения, но в противном случае наличие этого jar на пути к классам может привести к ошибкам.
Чтобы было ясно, я хочу создать как заштрихованный jar с дополнительной зависимостью, так и обычный jar без него в одном mvn package
вызов.
1 ответ
Попробуйте использовать профиль и указывать свою зависимость и оттенок только в этом профиле. Например:
<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 с этим ресурсом, просто включив профиль.
Другие проекты, которые зависят от этого, могут зависеть от затененного или не затененного артефакта, в зависимости от ситуации, так как вы используете классификатор для генерации обоих.