我有一个基于Gradle的项目,外部项目是依赖项。
settings.gradle
include ':app'
include ':mylibrary'
project(':mylibrary').projectDir = new File('/path/to/my/library')
我与我的应用同时开发mylibrary
,这就是我以这种方式将其包含在我的项目中的原因,而不是作为依赖项(我必须在每个项目中上传工件)将jar
更改或复制到libs
文件夹,这很乏味。
我的问题是,当我提交应用程序的更改时,Jenkins构建失败,因为它无法找到模块mylibrary
(显然,因为它在我的本地文件系统中)。
我应该如何处理?
答案 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 Versioning对mylibrary
进行版本设置,并使用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
中。这将是灾难的一个方法......)