使用账号密码访问受保护的maven仓库

当nexus中禁用了匿名用户(Anonymous)对仓库的访问时,我们需要在构建脚本中指定访问仓库的账号和密码。

1repositories {
2    maven {
3       url "http://192.168.1.10:8081/nexus/content/repositories/releases/"
4       credentials {
5       		username 'user'
6       		password 'password'
7       }
8    }
9}

上门的配置虽然能达到目的,但是用户名和密码是明文写到构建脚本中的,构建脚本需要被提交到版本管理系统中,这显然是不安全的,而且不支持针对每个开发人员使用不同的用户和密码。 更进一步,我们可以将用户名密码写到GRADLE_USER_HOME\gradle.properties中:

1mavenUser=user
2mavenPwd=password

此时在构建脚本中引用上面配置的属性:

1repositories {
2    maven {
3       url "http://192.168.1.10:8081/nexus/content/repositories/releases/"
4       credentials {
5       		username "$mavenUser"
6	       	password "$mavenPwd"
7       }
8    }
9}

通过上面的配置,将用户名和密码分离到了每个用户自己的GRADLE_USER_HOME\gradle.properties中,这样用户名和密码已经不再需要提交到版本系统,同时每个开发人员可以设置使用自己的用户名和密码。 但不完美的是,用户名和密码还是明文配置的。

Gradle发布构建jar到maven仓库

maven-publish插件

参考官方文档Chapter 36. Maven Publishing (new)

 1apply plugin: 'maven-publish'
 2
 3task sourceJar(type: Jar) {
 4    from sourceSets.main.allJava
 5}
 6
 7publishing {
 8    repositories {
 9        maven {
10            if(project.version.endsWith('-SNAPSHOT')) {
11	            url "http://192.168.1.10:8081/nexus/content/repositories/snapshots/"
12	        }else {
13	        	url "http://192.168.1.10:8081/nexus/content/repositories/releases/"
14	        }
15            credentials {
16	       		username "${mavenUser}"
17	       		password "${mavenPwd}"
18	       }
19        }
20    }
21    publications {
22        mavenJava(MavenPublication) {
23            from components.java
24            artifact sourceJar {
25                classifier "sources"
26            }
27        }
28    }
29}

maven插件

参考官方文档

 1apply plugin: 'maven'
 2
 3uploadArchives {
 4    repositories {
 5        mavenDeployer {
 6            repository(url: "http://192.168.1.10:8081/nexus/content/repositories/releases/") {
 7            	authentication(userName: "$mavenUser", password: "$mavenPwd")
 8        	}
 9        }
10    }
11}

Snapshot Dependency

1configurations.all {
2    resolutionStrategy.cacheChangingModulesFor 60, 'seconds'
3}
4
5dependencies {
6	compile('com.xx:xxx:1.0.0-SNAPSHOT') {
7		changing = true
8	}
9}