Gradle plugin for fetching specific maven repositories to local.
Supported dependency types:
[test|androidTest] + [implementation|api|compileOnly|runtimeOnly|annotationProcessor]
Maven Offline Gradle Plugin is available on both Gradle Plugin Portal and MavenCentral
1. Add the mavenCentral()
or gradlePluginPortal()
to your top-level
settings.gradle
:
pluginManagement {
repositories {
mavenCentral()
// or
gradlePluginPortal()
}
}
or build.gradle
(legacy):
buildscript {
repositories {
mavenCentral()
// or
gradlePluginPortal()
}
}
2. Apply the plugin to your root project(recommend) or sub-projects.
Kotlin DSL
// build.gradle.kts
plugins {
id("io.github.yubyf.maven-offline").version("$latest_version")
}
Groovy
// build.gradle
plugins {
id 'io.github.yubyf.maven-offline' version '${latest_version}'
}
Legacy Groovy
// build.gradle
buildscript {
//...
dependencies {
//...
classpath 'io.github.yubyf.mavenoffline:maven-offline-gradle-plugin:${latest_version}'
}
}
apply plugin: "io.github.yubyf.maven-offline"
NOTE: If you apply the plugin to the root project, it is automatically applied to ALL subprojects. You can apply the plugin to a specific subproject WITHOUT applying it to the root project to make it only work in that project.
You can configure plugin in build.gradle
where it is already applied.
The plugin lets you define repository URLs you want to fetch dependencies, the target path to store the fetched
repositories, and whether the classpath
declared dependencies should be included:
mavenOffline {
maven(
// Repository URLs, plugin provides default URLs for
// Maven Central, Google, and jcenter(not recommended)
// Default: empty
mavenCentral(),
google(),
jcenter(),
// Add your custom repository URLs here
"https://jitpack.io"
// Support regex patterns since v1.0.3
"https://.+?.sonatype.org/content/repositories/snapshots"
// Also support zero-length assertion regex
"https://((?!s01).).+?.sonatype.org/content/repositories/snapshots"
)
// Target path to store the fetched repositories
// Relative to the project or sub-project root directory
// Default full path: "$rootDir/maven-offline/"
targetPath = "/mavenOffline/"
// Whether to include the `classpath` declared dependencies
// such as the declared `classpath 'com.android.tools.build:gradle:x.y.z'`
// in the `buildscript>dependencies` block of `build.gradle`
// Default: false, recommended to set to false
includeClasspath = false
}
The plugin configuration syntax is the same in Kotlin DSL
and Groovy
.
NOTE: If the plugin is applied to the root project, the plugin configuration will override configurations in all sub-projects.
The plugin provides a fetchMavens
task to fetch dependencies. After Gradle sync is complete, the task will be
available in the Gradle tasks list.
You can run the task through the Gradle console:
// root project
gradlew fetchMavens
// sub-project
gradlew :${sub_project_name}:fetchMavens
The task will fetch all dependencies in repositories declared in the plugin configuration and store them in the target path.
The abbreviated result will be output to the console:
> Task :fetchMavens
Extracting artifacts for project :sample...
Found 64 dependencies in project :sample
Download directory of project :sample: .../sample/maven-offline/
Extracting effective repositories for project :sample...
Effective repositories of project :sample - MavenRepo
Start fetching mavens for project :sample...
Main files of [org.jetbrains:annotations:13.0] fetched successfully
Main files of [org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10] fetched successfully
...
Finished fetching mavens for project :TrueTypeParser
Downloaded dependencies: 0
Failed to download dependencies: 0
Not found dependencies: 0
Detailed logs are output to .../sample/build/outputs/logs/maven-offline-sample-report.txt
You can view the detailed logs by clicking the file link at the end of the task output in the console.
The fetched file structure is as follows:
maven-offline
└── junit
└── junit
├── 4.13.2
│ ├── junit-4.13.2-javadoc.jar
│ ├── junit-4.13.2-javadoc.jar.asc
│ ├── junit-4.13.2-javadoc.jar.md5
│ ├── junit-4.13.2-javadoc.jar.sha1
│ ├── junit-4.13.2-sources.jar
│ ├── junit-4.13.2-sources.jar.asc
│ ├── junit-4.13.2-sources.jar.md5
│ ├── junit-4.13.2-sources.jar.sha1
│ ├── junit-4.13.2.jar
│ ├── junit-4.13.2.jar.asc
│ ├── junit-4.13.2.jar.md5
│ ├── junit-4.13.2.jar.sha1
│ ├── junit-4.13.2.pom
│ ├── junit-4.13.2.pom.asc
│ ├── junit-4.13.2.pom.md5
│ └── junit-4.13.2.pom.sha1
└── maven-metadata.xml
- Add new task to re-download failed dependencies.
- Add support for fetching
annotationProcessor
dependencies. - Add support for URL
wildcard patternregex for Maven URL declarations. - Add support for file verification before fetching.
Copyright (c) 2022 Alex Liu
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.