上下文
我正在开发一个Gradle项目,该项目依赖于我创建的外部库。目前,我在project(':lib')
上使用了一个简单的依赖。
但这还不够,我需要发布和分发库作为独立组件,版本化和记录。我将安装Apache Archiva并将它们发布到内部maven存储库,因此我可以明确依赖'com.company:lib:1.0'
。
问题:
在开发过程中,我将同时处理图书馆和项目。如何在不发布库的情况下测试我的代码?以前依赖于project()
的我的应用程序现在将取决于特定版本。但在开发过程中,我想使用本地代码。
您知道处理此问题的最佳流程是什么?
答案 0 :(得分:2)
一种方法是有条件地添加依赖项。因此,对于本地构建(IDE),您希望通过源构建依赖项。然后,您可以通过让您的版本将param传递给构建来区分您的版本构建。
dependencies {
if (project.hasProperty('release')) {
compile 'com.company:lib:1.0'
} else {
compile project(':lib')
}
}
然后在你的发布版本中使用来自nexus的lib:
$ gradle -Prelease=true clean build
如果您想从项目内部使用lib构建项目:
$ gradle clean build
答案 1 :(得分:0)
Gradle's documentation(23.8.3.1
部分)中提供了此问题的正确答案,如下所示:
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module("com.company:lib") with project(":lib")
substitute module("com.company:lib2") with project(":lib2")
}
}
就个人而言,我使用了以下代码,这使得所有-SNAPSHOT
版本都可以从本地项目而不是远程存储库中获取(如果有本地项目可用):
configurations.all {
resolutionStrategy.dependencySubstitution {
all { dependency ->
if (! dependency.requested.version.endsWith('SNAPSHOT'))
return
if (subprojects.find { p ->p.name == dependency.requested.module })
dependency.useTarget project(":" + dependency.requested.module)
}
}
}