我必须针对具有lib
文件夹的实时系统开发模块。
为了获得所有依赖项,我需要在该文件夹中添加依赖项。
然后我使用gradle方式compile ...
问题是系统已经包含了我作为依赖项添加的一些库,或者被解析为传递依赖项。
我希望能够通过每个依赖项,如果我在lib文件夹中找到一个具有相同名称的依赖项,请将其删除,以便我可以使用从maven存储库中解析的依赖项。
我知道在哪里可以插入该代码,或者是否可以插入代码?
**我想另一种选择是将它们复制并手工过滤到一个新的lib文件夹中,我想知道我是否可以制作一些可以考虑将来升级的自动内容
答案 0 :(得分:0)
我必须针对具有lib文件夹的实时系统开发一个模块 问题是系统已经包含了我作为依赖项添加的一些库,或者被解析为传递依赖项。
管理此案例的最佳方法是避免lib
文件夹,只需将所有这些库/依赖项移到 maven(私有)repo 中。
通过这种方式,gradle将管理所有嵌套的依赖项,避免重复使用不同版本的库。
答案 1 :(得分:0)
我猜你有这样的事情
dependencies {
compile fileTree(dir: 'lib', include: '*.jar')
}
不幸的是,当您这样做时,GAV(组,工件,版本)不知道是否可以进行gradle。每个jar都只是一个没有GAV或任何其他元数据的文件(例如传递依赖)。这些罐子都不能参与Gradle的依赖性解析。
如果你想把你的罐放在本地文件夹中,我建议你使用maven存储库目录布局(例如/someFolder/$groupIdWithSlashes/$artifactId/$version/$artifactId-$version.$extension
)
然后,您可以将本地文件夹指定为maven存储库
repositories {
maven {
url uri('mavenRepo')
}
}
dependencies {
compile 'group1:artifact1:1.0'
compile 'group2:artifact2:2.0'
}
然后可以将罐子存储为
mavenRepo/group1/artifact1/1.0/artifact1-1.0.jar
mavenRepo/group2/artifact2/2.0/artifact2-2.0.jar
或者,您可能希望在
添加具有传递依赖性等的pomsmavenRepo/group1/artifact1/1.0/artifact1-1.0.pom
mavenRepo/group2/artifact2/2.0/artifact2-2.0.pom
有关maven目录布局here
的更多详细信息答案 2 :(得分:0)
添加另一个答案,因为你不想正确地做,你想要一个黑客
你可以这样做:
def libJars = fileTree(dir: 'lib', include: '*.jar')
dependencies {
compile 'foo:bar:1.0'
compile project(':anotherProject')
compile libJars
}
libJars.files.each { File libJar ->
// assuming jars are named $module-$version.jar
Pattern pattern = Pattern.compile("(.+)-.+?\\.jar")
Matcher matcher = pattern.matcher(libJar.name)
if (!matcher.matches()) throw new RuntimeException("${libJar.name} does not match ${pattern.pattern()}")
String module = matcher.group(1)
// exclude other dependencies with the same module as this "libJar"
configurations.compile.exclude [module: module]
}