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

时间:2015-12-17 07:40:42

标签: gradle continuous-integration

我有一个基于Gradle的项目,外部项目是依赖项。

settings.gradle

include ':app'
include ':mylibrary'
project(':mylibrary').projectDir = new File('/path/to/my/library')

我与我的应用同时开发mylibrary,这就是我以这种方式将其包含在我的项目中的原因,而不是作为依赖项(我必须在每个项目中上传工件)将jar更改或复制到libs文件夹,这很乏味。

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

我应该如何处理?

2 个答案:

答案 0 :(得分:1)

您应该在工作区中使用2个gradle项目:

  • <?php // List of events $json = array(); // Query that retrieves events $sql = "SELECT * FROM evenement ORDER BY id"; // connection to the database try { $bdd = new PDO('mysql:host=localhost;dbname=fullcalendar', 'root', ''); } catch(Exception $e) { exit('Unable to connect to database.'); } // Execute the query $resultat = $bdd->query($sql) or die(print_r($bdd->errorInfo())); // sending the encoded result to success page echo json_encode($resultat->fetchAll(PDO::FETCH_ASSOC)); ?>
  • mylibrary(依赖myapp

mylibrary被修改时,您应该测试它,如果测试已经通过,则将其提交到源存储库和二进制存储库。 (如果您不想手动执行此操作,则可以配置3个Jenkins作业,构建&lt; - test&lt; - 部署到二进制存储库,配置一点连续交付管道。)

接下来,当mylibrary被修改时,您应该测试它,如果测试已经通过,则将其提交到存储库。这样的提交触发了Jenkins构建,并且因为mylibrary存在于源代码库和二进制存储库中,所以它将成功编译。

您可以使用Semantic Versioningmylibrary进行版本设置,并使用graddle Dynamic Versions or Changing Modules功能管理mylibrary的最新版本。

答案 1 :(得分:1)

我这样解决了同样的问题。

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

当您更改mylibrary时,您可能希望立即对app显示该更改,而不会发布到二进制仓库。您可以使用:mylibrary:publishToMavenLocal任务完成此操作,该任务将二进制库放在您的~/.m2/reposity中。这只需要一个额外的命令,所以它不是太糟糕,我想。这假定在mylibrary中使用了新的Maven发布者:

apply plugin: 'maven-publish'

接下来,需要指示app从那里获取依赖项:

repositories {
    mavenLocal()
    //other repos
}

app:compileJava任务现在应该先检查您当地的Maven仓库,然后再检查远程仓库。

我发现这种方法比taringamberini的答案更可取,因为您不必将更改发布到library,而这些更改尚未准备好进行客户发布。在将库更改合并到mylibrary之前,您甚至可以测试对app的更改是否中断master

(你想要发布二进制仓库的更改,这些更改不在master中。这将是灾难的一个方法......)