要進行脫機構建,您需要以某種方式提供所有必需的依賴關係。這裏的選項之一就是將這些jar提交到版本控制。困難的部分是收集所有這些依賴關係。對於它可能有一個可以在兩種模式操作的build.gradle文件(在線和離線):
buildscript {
repositories {
if ('allow' == System.properties['build.network_access']) {
mavenCentral()
} else {
maven {
url 'dependencies'
}
}
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.0-beta2'
}
}
要在離線模式下運行類型:
gradle --offline
以及在在線模式下運行:
gradle -Dbuild.network_access=allow
,並收集所有的依賴使用該腳本將運行在聯機模式下的gradle產出,下載依賴於內部${project_dir}/.gradle_home
緩存和文物複製到本地Maven回購位於dependencies
文件夾中。
#!/usr/bin/python
import sys
import os
import subprocess
import glob
import shutil
# Place this in build.gradle:
# repositories {
# if ('allow' == System.properties['build.network_access']) {
# mavenCentral()
# } else {
# maven { url 'dependencies' }
# }
# }
def main(argv):
project_dir = os.path.dirname(os.path.realpath(__file__))
repo_dir = os.path.join(project_dir, "dependencies")
temp_home = os.path.join(project_dir, ".gradle_home")
if not os.path.isdir(temp_home):
os.makedirs(temp_home)
subprocess.call(["gradle", "-g", temp_home, "-Dbuild.network_access=allow"])
cache_files = os.path.join(temp_home, "caches/modules-*/files-*")
for cache_dir in glob.glob(cache_files):
for cache_group_id in os.listdir(cache_dir):
cache_group_dir = os.path.join(cache_dir, cache_group_id)
repo_group_dir = os.path.join(repo_dir, cache_group_id.replace('.', '/'))
for cache_artifact_id in os.listdir(cache_group_dir):
cache_artifact_dir = os.path.join(cache_group_dir, cache_artifact_id)
repo_artifact_dir = os.path.join(repo_group_dir, cache_artifact_id)
for cache_version_id in os.listdir(cache_artifact_dir):
cache_version_dir = os.path.join(cache_artifact_dir, cache_version_id)
repo_version_dir = os.path.join(repo_artifact_dir, cache_version_id)
if not os.path.isdir(repo_version_dir):
os.makedirs(repo_version_dir)
cache_items = os.path.join(cache_version_dir, "*/*")
for cache_item in glob.glob(cache_items):
cache_item_name = os.path.basename(cache_item)
repo_item_path = os.path.join(repo_version_dir, cache_item_name)
print "%s:%s:%s (%s)" % (cache_group_id, cache_artifact_id, cache_version_id, cache_item_name)
shutil.copyfile(cache_item, repo_item_path)
shutil.rmtree(temp_home)
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))
所以,每個相關變化後僅運行此腳本,並在dependencies
文件夾提交更改。然後,您可以使用gradle --offline
或gradle
離線構建。
英文自述會好的 – Cesar 2017-11-03 21:47:10
這個ivypot插件很酷。但它不能解決我的問題。我只需要緩存來自私有存儲庫的一組有限的依賴項。我不需要緩存所有內容。 因此,我需要搜索另一個類似的插件,或者在此插件代碼中實現該功能。 – kinORnirvana 2017-11-09 10:46:49