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>
base
tạo tác, phụ thuộc vào javax.mail:mail-1.4.jar
và ALL-DEPS
phụ 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.jar
từ ALL-DEPS
tồ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.jar
tồ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 base
là 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>
...