Anche se una soluzione migliore sarebbe quella di ri-confezionare la dipendenza (senza il pacchetto di indesiderato) con un classificatore (come descritto nel this answer) e pubblicarlo sul proprio repository aziendale Maven (o install it nella cache Maven locale, se si tratta di un progetto personale), di seguito è una soluzione diversa che dovrebbe soddisfare anche le vostre esigenze.
si potrebbe avere un progetto multi-module Maven, avendo un modulo con solo questa dipendenza e in essa è possibile utilizzare la sua proprietà Maven Shade Plugin e filters
come spiegato nella sua official example.
Come per documentation, l'elemento filters
:
Filtri archivio da utilizzare. Consente di specificare un manufatto in forma di un identificatore composito come quello usato dal artifactSet e una serie di includere/escludere i modelli di file per il filtraggio cui contenuto dell'archivio vengono aggiunti al barattolo ombreggiata
Nel tuo caso, il seguente configurazione dovrebbe applicare il filtro:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>com.ibm:com.ibm.ws.admin.client</artifact>
<excludes>
<exclude>org/osgi/framework/**</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
il vaso generato dalla fase package
non deve contenere quel pacchetto più. Come parte della produzione Maven si dovrebbe vedere:
[INFO] --- Maven-ombra-plugin: 2.4.3: Ombra (default) @ test-checksum ---
[INFO] Compresi com .ibm: com.ibm.ws.admin.client: jar: 8.5.0 nel barattolo ombreggiato.
[INFO] Sostituzione di artefatto originale con artefatto ombreggiato.
È possibile verificare il contenuto del contenitore generato, il pacchetto filtrato non dovrebbe essere lì.
Quindi, l'output di questo modulo avrà il "nuovo"/vaso filtrato che stavi cercando. Quindi il modulo consumer dovrebbe solo avere una dipendenza da questo modulo e come tale avere applicato il filtro.
Un esempio di un progetto così multimodulo sarebbe:
+ aggregator/parent project
- filtered-dependency-module (applying the shade filter)
- consumer-module (having dependency on the filtered module)
Aggiornamento
Nota ulteriore: nel modulo che applica il filtro, si dovrebbe dichiarare la dipendenza come optional in modo che il modulo consumatore non lo fa portalo di nuovo in transito.
<dependencies>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.ws.admin.client</artifactId>
<version>8.5.0</version>
<optional>true</optional>
</dependency>
</dependencies>
opzionale non influisce sul modulo stesso, solo il consumatore uno. E il plugin di Shade continuerà a funzionare (l'ho ri-testato, per ogni evenienza).
Ecco il repository https: // bitbucket.org/rcbandit/repository/raw/master/ –
@PeterPenzov hai provato l'approccio sopra? ha funzionato? –
No, ho ancora lo stesso problema anche con la soluzione proposta. –