Android Gradle에서 git 저장소를 종속성으로 선언 할 수 있습니까?


답변:


150

나에게 가장 좋은 방법은 다음과 같습니다.

https://jitpack.io

1 단계. 리포지토리 끝에있는 build.gradle에 JitPack 리포지토리를 추가합니다.

repositories {
    // ...
    maven { url "https://jitpack.io" }
}

2 단계. 양식에 종속성 추가

dependencies {
    compile 'com.github.User:Repo:Tag'
}

다음과 같이 마스터 브랜치에서 최신 커밋을 빌드 할 수 있습니다.

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}

6
최신 마스터를 원하는 경우 다음 버전 사용 -SNAPSHOT jitpack.io/docs/#snapshots
안드레이

5
이것은 스팸입니다. 하지만 난 정말 말하고 싶은 jitpack.io이 .............. 정말 정말 정말 멋지다
에릭

5
이 부분을 메인 섹션이 아닌 메인 섹션에 넣어야합니다.buildscript
Sergei Ledvanov

"TAG"는 무엇입니까 ??
Makalele

@Makalele, "TAG"는 git 태그입니다 (예 : 일부 릴리스와 같은 태그 된 커밋). docs
sunnyday

40

또는 다음과 같은 하위 모듈로 저장소를 등록 할 수 있습니다.

$ git submodule add my_sub_project_git_url my-sub-project

그런 다음 settings.gradle 파일에 다음과 같은 프로젝트를 포함합니다.

include ':my-app', ':my-sub-project'

마지막으로 다음과 같이 애플리케이션 build.gradle 파일에서 프로젝트를 종속성으로 컴파일하십시오.

dependencies {
  compile project(':my-sub-project')
}

그런 다음 프로젝트를 복제 할 때 --recursivegit이 루트 저장소와 모든 하위 모듈을 자동으로 복제하도록 하는 옵션 만 추가하면 됩니다.

git clone --recursive my_sub_project_git_url

도움이되기를 바랍니다.


나는 보통 댓글에 이것을 쓰지 않지만,이 경우에는 그냥 "젠장, 친구! 정말 멋지다, 고마워!"라고 말하면된다. :-)
L.Butz

@MisterSmith에 동의합니다. Git 하위 모듈은 종종 여러분과 다른 사람들을 물기 위해 돌아옵니다.
AO_

13

이제 gradle에 git에서 소스 종속성을 추가 할 수있는 새로운 기능이 있습니다.

먼저 settings.gradle파일 에서 저장소를 정의하고 모듈 식별자에 매핑해야합니다.

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

이제 build.gradle특정 태그 (예 : 'v1.0')를 가리킬 수 있습니다.

dependencies {
    ...

    implementation 'org.gradle.cpp-samples:utilities:v1.0'
}

또는 특정 지점으로 :

dependencies {
    ...

    implementation('org.gradle.cpp-samples:utilities') {
        version {
            branch = 'release'
        }
    }
}

주의 사항 :

  • Gradle 4.10 이상 필요
  • 아직 인증을 지원하지 않습니다

참조 :


이것이 IDE에서도 작동 할 수 있다면 좋을 것입니다. 내 Android 프로젝트 (Android Studio 3.4.1 포함)의 내 라이브러리 중 하나에 대해 sourceControl을 사용해 보았습니다. IDE가 "gradle sync"를 수행 할 수없고 소스 파일이 작동합니다. 라이브러리를 볼 수 없습니다 ... .. 그러나 "./gradlew build"를 사용하여 명령 줄을 통해 빌드하면 모든 것이 작동합니다.
GABRY

나뿐인지 확실하지 않지만 특히 라이브러리에 데이터 바인딩이있을 때 많은 문제에 직면했습니다. 하나의 경우 gradle 스크립트가 NPE를 던지고 git repo를 자동으로 빌드하는 동안 데이터 바인딩 컴파일러의 sdk 폴더를 찾을 수 없습니다. android.googlesource.com/platform/tools/base/+/... 난 내가뿐만 아니라 다른 문제 다 퉜다 그러나 내 local.properties를 저지하는 데 결국
humblerookie을

6

Gradle이 git 저장소를 종속성으로 추가하는 것을 지원하지 않는다고 생각합니다. 내 해결 방법은 다음과 같습니다.

  • 메인 프로젝트가 파일 시스템의 다른 프로젝트에 의존한다고 선언
  • 종속성으로 선언 된 폴더에서 git 저장소를 자동으로 복제하는 방법을 제공합니다.

메인 프로젝트 리포지토리의 폴더 외부에 라이브러리 리포지토리를 원한다고 가정하므로 각 프로젝트는 독립적 인 git 리포지토리가되고 라이브러리 및 메인 프로젝트 git 리포지토리에 독립적으로 커밋 할 수 있습니다.

라이브러리 프로젝트의 폴더를 메인 프로젝트의 폴더와 같은 폴더에두고 싶다고 가정하면,

다음과 같이 할 수 있습니다.

최상위 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' )

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
        }

프로젝트의 종속성에서 프로젝트의 코드가 git 프로젝트의 폴더에 따라 달라진다고 가정합니다.

dependencies {
    compile project(':lib_project')
}

Gradle은 이제 특정 제한 사항이있는 소스 종속성을 지원합니다. 내 대답을 참조하십시오 여기에
미스터 스미스

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.