there 2 classes com.package.a
, 1 coming from
<dependency> <groupid>com.package</groupid> <artifactid>art1</artifactid> </dependency>
and 1 coming from
<dependency> <groupid>com.package</groupid> <artifactid>art2</artifactid> </dependency>
notice artifact ids different.
for different maven profiles, want exclude 1 version , keep other version. using shade plugin.
with maven-shade-plugin
, possible exclude class specific dependencies. configured of filters
property:
archive filters used. allows specify artifact in form of composite identifier used
artifactset
, set of include/exclude file patterns filtering contents of archive added shaded jar.
in case, exclude class com.package.a
dependency art2
, can have:
<filters> <filter> <artifact>com.package:art2</artifact> <excludes> <exclude>com/package/a.class</exclude> </excludes> </filter> </filters>
to make dynamic, i.e. select @ build-time com.package.a
class want keep, don't need use profile. can use maven property hold artifact id of dependency filter. in properties, add
<properties> <shade.exclude.artifactid>art2</shade.exclude.artifactid> </properties>
the shade.exclude.artifactid
property hold artifact id of dependency filter. default, configuration select art2
. then, in <filter>
configuration of shade plugin, can use <artifact>com.package:${shade.exclude.artifactid}</artifact>
.
here's full configuration of in action:
<build> <plugins> <plugin> <artifactid>maven-shade-plugin</artifactid> <version>2.4.3</version> <executions> <execution> <id>shade</id> <goals> <goal>shade</goal> </goals> <phase>package</phase> <configuration> <filters> <filter> <artifact>com.package:${shade.exclude.artifactid}</artifact> <excludes> <exclude>com/package/a.class</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build> <properties> <shade.exclude.artifactid>art2</shade.exclude.artifactid> </properties>
running mvn clean package
create uber jar a.class
art1
since 1 art2
excluded. , then, running mvn clean package -dshade.exclude.artifactid=art1
keep time a.class
dependency art2
since 1 art1
excluded.
Comments
Post a Comment