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 с этим ресурсом, просто включив профиль.

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

Другие вопросы по тегам