Java 为什么我的库的编译依赖项会泄漏?
我和Gradle 3.4.1一起工作 我有一个用GradleJava库插件构建的库(我们称之为utils),它生成了一个漂亮的JAR文件。这是依赖项部分:Java 为什么我的库的编译依赖项会泄漏?,java,gradle,Java,Gradle,我和Gradle 3.4.1一起工作 我有一个用GradleJava库插件构建的库(我们称之为utils),它生成了一个漂亮的JAR文件。这是依赖项部分: dependencies { // public API api group: "org.postgresql", name: "postgresql", version: "9.2-1004-jdbc4" api group: "log4j", name: "log4j", version: "1.2.17" // impleme
dependencies {
// public API
api group: "org.postgresql", name: "postgresql", version: "9.2-1004-jdbc4"
api group: "log4j", name: "log4j", version: "1.2.17"
// implementation specific
implementation group: "commons-configuration", name: "commons-configuration" , version: "1.10"
implementation group: "commons-lang", name: "commons-lang" , version: "2.6"
}
现在,我的项目包括这个库以及一些其他Apache Commons库:
dependencies {
compile group: "com.foo", name: "utils", version: "6.+", changing: true
compile group: "org.apache.commons", name: "commons-lang3", version: "3.5"
compile group: "commons-io", name: "commons-io" , version: "2.5"
}
在项目的类路径中,我现在有了commons-lang
库以及commons-lang3
库,尽管我将相应的依赖项指定为implementation
!根据文件,这应该是正确的方法
以下是我的项目的依赖项列表:
default - Configuration for default artifacts.
+--- com.foo:utils:6.+ -> 6.0.0
| +--- org.postgresql:postgresql:9.2-1004-jdbc4
| +--- log4j:log4j:1.2.17
| +--- commons-configuration:commons-configuration:1.10
| | +--- commons-lang:commons-lang:2.6
| | \--- commons-logging:commons-logging:1.1.1
| \--- commons-lang:commons-lang:2.6
+--- org.apache.commons:commons-lang3:3.5
\--- commons-io:commons-io:2.5
我做错了什么?如何摆脱外部依赖关系
commons lang
和commons configuration
?排除可传递依赖关系有几种方法,这些方法在几个问题和gradle文档中都有介绍
configurations {
compile.transitive = false
}
或
或
排除可传递依赖项有几种方法,这些方法在几个问题和gradle文档中都有介绍
configurations {
compile.transitive = false
}
或
或
请注意,实现依赖项最终仍将作为运行时依赖项—它们在运行时在类路径上是必需的。请注意,实现依赖项最终仍将作为运行时依赖项—它们在运行时在类路径上是必需的。
dependencies {
compile ('foo:bar:0.1') {
exclude group: "org.slf4j", module: "slf4j-log4j12"
}
}