Các <exclusions>phần tử phụ thuộc có thể bị loại trừ bằng cách khai báo một phần tử bên trong. <dependency>Nhưng trong trường hợp này, cần loại trừ một phần tử được kế thừa từ một dự án mẹ. Một đoạn trích của POM đang được thảo luận như sau:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>jruby</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<artifactId>base</artifactId>
<groupId>es.uniovi.innova</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>ALL-DEPS</artifactId>
<version>1.0</version>
<scope>provided</scope>
<type>pom</type>
</dependency>
</dependencies>
</project>
basetạo tác, phụ thuộc vào javax.mail:mail-1.4.jarvà ALL-DEPSphụ thuộc vào một phiên bản khác của cùng một thư viện. Do thực tế là mail.jartừ ALL-DEPStồn tại trên môi trường thực thi, mặc dù không được xuất, nhưng lại va chạm với mail.jartồn tại trên môi trường cha, được xác định phạm vi như compile.
Một giải pháp có thể là loại bỏ mail.jar khỏi POM mẹ, nhưng hầu hết các dự án kế thừa base đều cần nó (cũng như phụ thuộc chuyển đổi cho log4j). Vì vậy, những gì tôi muốn làm là chỉ cần loại trừ thư viện của cha mẹ khỏi dự án con , vì nó có thể được thực hiện nếu baselà một phụ thuộc và không phải là pom mẹ:
...
<dependency>
<artifactId>base</artifactId>
<groupId>es.uniovi.innova</groupId>
<version>1.0.0</version>
<type>pom<type>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
</exclusions>
</dependency>
...