是否可以在android gradle中将git存储库声明为依赖?

Ale*_*rov 100 android android-build android-studio android-gradle-plugin

我想从mavencentral使用我的lib的主版本.

是否可以在android gradle中将git存储库声明为依赖?

sun*_*day 135

对我来说,最好的方法是:

https://jitpack.io

步骤1.将JitPack存储库添加到构建文件中将其添加到存储库末尾的build.gradle中:

repositories {
    // ...
    maven { url "https://jitpack.io" }
}
Run Code Online (Sandbox Code Playgroud)

步骤2.在表单中添加依赖项

dependencies {
    compile 'com.github.User:Repo:Tag'
}
Run Code Online (Sandbox Code Playgroud)

可以在主分支上构建最新的提交,例如:

__CODE__

  • 如果你想要最新的主人,那么使用版本`-SNAPSHOT` https://jitpack.io/docs/#snapshots (6认同)
  • 我想这是垃圾邮件.但我真的想说https://jitpack.io真的很酷.............. (5认同)
  • 确保将其放在主要部分,而不是"buildscript" (5认同)
  • 尽管 Jitpack 很棒,但对于很多人来说它并不是一个真正的选择,因为它是为私人存储库付费的。 (4认同)
  • @Makalele,“TAG”是一个 git 标签(任何标记的提交,例如某个版本)。[文档](https://git-scm.com/docs/git-tag) (2认同)

tru*_*pin 35

或者您可以将存储库注册为这样的子模块

$ git submodule add my_sub_project_git_url my-sub-project
Run Code Online (Sandbox Code Playgroud)

然后在settings.gradle文件中包含项目,该文件应如下所示

include ':my-app', ':my-sub-project'
Run Code Online (Sandbox Code Playgroud)

最后,将项目编译为应用程序build.gradle文件中的依赖项,如下所示

dependencies {
  compile project(':my-sub-project')
}
Run Code Online (Sandbox Code Playgroud)

然后,在克隆项目时,您只需添加选项--recursive以使git自动克隆根存储库及其所有子模块.

git clone --recursive my_sub_project_git_url
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.

  • 我通常不会在评论中写下这一点,但在这种情况下,我不得不说“天哪,伙计!太酷了,谢谢!” :-) (4认同)

Mis*_*ith 22

gradle 现在有一个新功能,可以让您从 git 添加源依赖项。

您首先需要在settings.gradle文件中定义 repo并将其映射到模块标识符:

sourceControl {
    gitRepository("https://github.com/gradle/native-samples-cpp-library.git") {
        producesModule("org.gradle.cpp-samples:utilities")
    }
}
Run Code Online (Sandbox Code Playgroud)

现在build.gradle你可以指向一个特定的标签(例如:'v1.0'):

dependencies {
    ...

    implementation 'org.gradle.cpp-samples:utilities:v1.0'
}
Run Code Online (Sandbox Code Playgroud)

或者到一个特定的分支:

dependencies {
    ...

    implementation('org.gradle.cpp-samples:utilities') {
        version {
            branch = 'release'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意事项:

  • 需要 Gradle 4.10 或更高版本
  • 尚不支持身份验证

参考:

  • 我在这方面运气不太好。近两年后,它几乎没有记录,选项很少,没有很好的例子,而且似乎只适用于“完美”的存储库。 (4认同)
  • 如果你的仓库是私有的怎么办? (2认同)

GaR*_*eTa 6

我不认为gradle支持添加git repo作为依赖.我的解决方法是:

  • 声明主项目依赖于文件系统中的另一个项目
  • 提供一种在声明为依赖项的文件夹中自动克隆git repo的方法

我假设您希望库repo位于主项目仓库的文件夹之外,因此每个项目都将是独立的git repos,并且您可以独立地提交到库和主项目git repos.

假设您希望将库项目的文件夹放在与主项目文件夹相同的文件夹中,

你可以:

在顶级settings.gradle中,将库存储库声明为项目,并给出它在文件系统中的位置

// Reference:  https://looksok.wordpress.com/2014/07/12/compile-gradle-project-with-another-project-as-a-dependency/

include ':lib_project'
project( ':lib_project' ).projectDir = new File(settingsDir, '../library' )
Run Code Online (Sandbox Code Playgroud)

使用gradle-git插件从git存储库中克隆库

    import org.ajoberstar.gradle.git.tasks.*

    buildscript {
       repositories { mavenCentral() }
       dependencies { classpath 'org.ajoberstar:gradle-git:0.2.3' }
    }

    task cloneLibraryGitRepo(type: GitClone) {
            def destination = file("../library")
            uri = "https://github.com/blabla/library.git"
            destinationPath = destination
            bare = false
            enabled = !destination.exists() //to clone only once
        }
Run Code Online (Sandbox Code Playgroud)

在项目的依赖项中,假设项目的代码取决于git项目的文件夹

dependencies {
    compile project(':lib_project')
}
Run Code Online (Sandbox Code Playgroud)


sga*_*man 5

我发现最接近的是https://github.com/bat-cha/gradle-plugin-git-dependencies但是我无法使用android插件,即使在git之后仍然试图从maven中取出repos已加载.