【发布时间】:2021-11-26 18:42:31
【问题描述】:
我的项目中有以下 build.gradle
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.oracle.database.jdbc:ojdbc11-production:21.3.0.0'
implementation 'com.microsoft.sqlserver:mssql-jdbc:9.4.0.jre8'
}
tasks.named('jar') {
setDuplicatesStrategy(DuplicatesStrategy.WARN)
manifest {
attributes 'Main-Class': 'com.example.App'
}
from {
configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
文件META-INF/services/java.sql.Driver 存在于两个导入的jar 中。实际上,这个 Oracle JDBC 依赖项导入了多个 jar,它们之间有更多冲突的文件(内容不同)(例如 META-INF/native-image/native-image.properties 和此目录中的其他文件)。
当 DuplicatesStrategy 设置为 WARN 时,Oracle 驱动程序会覆盖 SQL Server JDBC 驱动程序的 META-INF/services/java.sql.Driver。覆盖此(和其他)文件的后果是什么?
我应该如何处理这些重复的文件?有没有办法从所有 jar 中获取所有文件? jar 的某些文件被覆盖的机会让我感到不安。
冲突文件常见吗?
【问题讨论】: