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.

questionAnswers(4)

yourAnswerToTheQuestion