Maven: como substituir a dependência adicionada por uma biblioteca
Aqui está o meu problema genérico:
Meu projeto P depende de A, que depende de B, que depende de C, que depende da versão 1.0.1 de D.
Há um problema com a versão 1.0.1 do D e quero forçar o uso de outro módulo. Não sei como declarar isso nos POMs do meu projeto, pois não adicionei uma dependência diretamente de D. É C que declarou a dependência em D.
Importante: Nesse caso, não apenas a versão é alterada, mas também o grupo e artefato. Portanto, não se trata apenas de substituir a versão da dependência, mas de excluir um módulo e incluir outro.
No caso concreto, D é StAX cujo 1.0.1 possui umerro. De acordo com as notas no bug, "os problemas foram resolvidos substituindo o stax-api-1.0.1 (maven GroupId = stax) por stax-api-1.0-2 (maven GroupId = javax.xml.stream)", então eu estou tentando exatamente isso.
Assim, D = stax: stax-api: jar: 1.0.1 e C = org.apache.xmlbeans: xmlbeans: jar: 2.3.0
Estou usando o maven 2.0.9, caso isso importe.
Saída da dependência mvn: tree "
mvn dependency:tree
[..snip..]
[INFO] +- org.apache.poi:poi-ooxml:jar:3.6:compile
[INFO] | +- org.apache.poi:poi-ooxml-schemas:jar:3.6:compile
[INFO] | | +- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
[INFO] | | | \- stax:stax-api:jar:1.0.1:compile
No POM do meu projeto, tenho a seguinte dependência de "A":
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.6</version>
</dependency>
Desde já, obrigado.