Java Gradle/Maven:如何在开发依赖中使用?

Java Gradle/Maven:如何在开发依赖中使用?,java,maven,gradle,Java,Maven,Gradle,上下文: 我正在从事一个Gradle项目,该项目依赖于外部库,也是由我创建的。目前我使用的是一个简单的依赖于项目(':lib') 但这还不够,我需要将库作为独立组件发布和分发,并进行版本连接和文档化。我将安装ApacheArchiva并将它们发布到内部maven存储库中,这样我就可以明确地依赖于'com.company:lib:1.0' 问题: 在开发过程中,我将同时处理库和项目。如何在不发布库的情况下测试代码?我的应用程序以前依赖于project(),现在依赖于特定的版本。但是在开发过程中,我

上下文:

我正在从事一个Gradle项目,该项目依赖于外部库,也是由我创建的。目前我使用的是一个简单的依赖于
项目(':lib')

但这还不够,我需要将库作为独立组件发布和分发,并进行版本连接和文档化。我将安装ApacheArchiva并将它们发布到内部maven存储库中,这样我就可以明确地依赖于
'com.company:lib:1.0'

问题:

在开发过程中,我将同时处理库和项目。如何在不发布库的情况下测试代码?我的应用程序以前依赖于
project()
,现在依赖于特定的版本。但是在开发过程中,我希望使用本地代码


您知道处理此问题的最佳流程是什么吗?

一种方法是有条件地添加依赖项。因此,对于本地构建(IDE),您希望通过源代码构建依赖关系。然后,您可以通过让您的发行版向一个发行版传递一个参数来区分您的发行版发行版

dependencies {
    if (project.hasProperty('release')) {
        compile 'com.company:lib:1.0'
    } else {
        compile project(':lib')
    }
}
然后在发布版本中使用nexus的库:
$gradle-prerelease=true clean build

如果要从项目内部使用lib构建项目:

$gradle clean build

一种方法是有条件地添加依赖项。因此,对于本地构建(IDE),您希望通过源代码构建依赖关系。然后,您可以通过让您的发行版向一个发行版传递一个参数来区分您的发行版发行版

dependencies {
    if (project.hasProperty('release')) {
        compile 'com.company:lib:1.0'
    } else {
        compile project(':lib')
    }
}
然后在发布版本中使用nexus的库:
$gradle-prerelease=true clean build

如果要从项目内部使用lib构建项目:

$gradle clean build

中提供了此问题的正确答案(第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
版本都可以从本地项目而不是远程存储库中获取(如果本地项目可用):


有关此问题的正确答案,请参见(第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
版本都可以从本地项目而不是远程存储库中获取(如果本地项目可用):


您可以构建快照版本并将其发布到maven上。通常每个maven都有一个发行版(稳定版)和快照存储库。@GabrieleMariotti这意味着每次修改时我都必须上传快照版本?在机器中,您可以始终使用compile project(:xxx)。但是,如果您需要在开发期间与团队共享快照,那么快照可能是一种很好的方法,您可以构建快照版本并将其发布到maven上。通常每个maven都有一个发行版(稳定版)和快照存储库。@GabrieleMariotti这意味着每次修改时我都必须上传快照版本?在机器中,您可以始终使用compile project(:xxx)。但是,如果在开发过程中需要与团队共享,快照可能是一种很好的方法