Gradle 持续集成和渐变:作为依赖项的外部项目

Gradle 持续集成和渐变:作为依赖项的外部项目,gradle,continuous-integration,Gradle,Continuous Integration,我有一个基于Gradle的项目,外部项目作为依赖项 设置。渐变 include ':app' include ':mylibrary' project(':mylibrary').projectDir = new File('/path/to/my/library') 我与我的应用程序同时开发mylibrary,这就是为什么我将它以这种方式包含在我的项目中,而不是作为依赖项(我必须在每次更改中上载工件,或者将jar复制到libs文件夹中,这很乏味) 我的问题是,当我提交应用程序的更改时,Jen

我有一个基于Gradle的项目,外部项目作为依赖项

设置。渐变

include ':app'
include ':mylibrary'
project(':mylibrary').projectDir = new File('/path/to/my/library')
我与我的应用程序同时开发
mylibrary
,这就是为什么我将它以这种方式包含在我的项目中,而不是作为依赖项(我必须在每次更改中上载工件,或者将
jar
复制到
libs
文件夹中,这很乏味)

我的问题是,当我提交应用程序的更改时,Jenkins build失败,因为它找不到模块
mylibrary
(显然,因为它在我的本地文件系统中)


我该怎么处理呢

您应该在工作区中处理两个gradle项目:

  • mylibrary
  • myapp
    (依赖于
    mylibrary

当修改
mylibrary
时,您应该对其进行测试,如果测试通过,则将其提交到源存储库和二进制存储库。(如果您不想手动执行此操作,您可以配置3个Jenkins作业,build我只是通过这种方式解决了相同的问题

app
中添加
mylibrary
作为适当的依赖项。
app
生成将尝试从配置的远程Maven或Ivy repo中提取库

当您更改
mylibrary
时,您可能希望使该更改立即对
app
可见,而无需发布到二进制repo。您可以通过使用
:mylibrary:PublishToAvenLocal
任务来完成此操作,该任务将二进制库放入
~/.m2/reposity
中。这只需要一个额外的命令即可完成我认为还不错。这假设新的Maven发布服务器正在
mylibrary
中使用:

apply plugin: 'maven-publish'
接下来,需要指示
app
从那里获取依赖项:

repositories {
    mavenLocal()
    //other repos
}
app:compileJava
任务现在应该先检查本地Maven回购,然后再检查远程回购

我发现这种方法比taringamberini的答案更可取,因为您不必将尚未准备好供客户发布的更改发布到
库中。您甚至可以在将库更改合并到
主库中之前,测试对
mylibrary
的更改是否不会中断
应用程序

(您不想发布对二进制repo的更改,这些更改不在
master
中。这将导致灾难…)