Gradle - 导入GitHub存储库并使其成为子项目依赖项?

时间:2015-04-25 22:34:17

标签: java git gradle

我试图通过部署JAR文件依赖来避免多项目构建,但它确实破坏了我灵活的工作流程,我需要一种更快的方法来使我的GIT存储库动态地相互添加为依赖项。我确信我可以使用JAR文件编写一些创造性的部署程序,但我喜欢对一个项目进行更改,以便在没有中间部署的情况下立即转向其他依赖项目。

我正在浏览grgit文档,我发现它允许分支克隆操作。但是,如何在克隆之后提取工作树并将其作为依赖项包含,假设repo本身有自己的gradle.build脚本?

repositories {
    mavenCentral()
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'

dependencies {
    compile group: 'com.google.guava', name: 'guava', version: '18.0'
    compile 'org.xerial:sqlite-jdbc:3.8.7'
    compile 'net.jcip:jcip-annotations:1.0'
    compile 'joda-time:joda-time:2.7'
    compile files('path/to/my/repo') //not quite sure what to do here??? 
}

task downloadGitDependency { 
    def grgit = Grgit.clone(dir: 'path/to/my/repo', uri: 'git@github.com:ajoberstar/grgit.git')
}
build.dependsOn downloadGitDependency

sourceSets {
    main.java.srcDir "src/main/java"
}

jar { 
    from configurations.compile.collect { entry -> zipTree(entry) }
}

1 个答案:

答案 0 :(得分:0)

如果子项目列表是(相当)静态且每个子项目都有自己的build.gradle,则可以将它们添加为git子模块。在您的项目目录中,执行:

git submodule add git@github.com:ajoberstar/grgit.git path/to/my/repo
cd path/to/my/repo
git fetch

# then either (to switch to a different branch):
git checkout -b mybranch origin/mybranch

# or (to check out a particular ref on the current branch):
git checkout deadc0de

# or both of the above (to check out a particular ref on a different branch)

(注意:您在示例中使用的git URL会将grgit添加为子项目 - 除非这是您想要的,您可以在此处使用远程仓库的URL作为子项目。path/tp/my/repo是任意的项目树中要克隆子项目的路径。)

然后,将您的子项目添加到主项目的构建配置:import settings.gradle中,并将其定义为build.gradle中的依赖项。

Git会将主要模块的提交链接到子模块的特定提交。

但是,请注意,在git中使用子模块并非没有缺陷:不要提交子模块(总是提交上游),并确保每次HEAD更改时运行git submodule update(拉,合并,结账等)。关于git子模块陷阱的一篇好文章:https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/