1
- /*
2
- * Based on the example at Chris Banes's repository that allows signing
3
- * without manually creating a maven file.
4
- *
5
- * The original can be found at
6
- * https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle
7
- */
8
-
9
- apply plugin : ' maven'
1
+ apply plugin : ' java'
2
+ apply plugin : ' maven-publish'
10
3
apply plugin : ' signing'
11
- apply plugin : ' io.codearte.nexus-staging'
12
4
13
- nexusStaging {
14
- packageGroup = GROUP
5
+ repositories {
6
+ mavenCentral()
15
7
}
16
8
17
- def isReleaseBuild () {
18
- return VERSION_NAME . contains(" SNAPSHOT" ) == false
19
- }
20
9
21
- def getReleaseRepositoryUrl ( ) {
22
- return hasProperty( ' RELEASE_REPOSITORY_URL ' ) ? RELEASE_REPOSITORY_URL
23
- : " https://oss.sonatype.org/service/local/staging/deploy/maven2/ "
10
+ task sourceJar ( type : Jar ) {
11
+ classifier " sources "
12
+ from sourceSets . main . allJava
24
13
}
25
14
26
- def getSnapshotRepositoryUrl ( ) {
27
- return hasProperty( ' SNAPSHOT_REPOSITORY_URL ' ) ? SNAPSHOT_REPOSITORY_URL
28
- : " https://oss.sonatype.org/content/repositories/snapshots/ "
15
+ task javadocJar ( type : Jar , dependsOn : javadoc ) {
16
+ classifier " javadoc "
17
+ from javadoc . destinationDir
29
18
}
30
19
31
- def getRepositoryUsername () {
32
- return hasProperty(' NEXUS_USERNAME' ) ? NEXUS_USERNAME : " "
20
+ artifacts {
21
+ archives jar
22
+ archives sourceJar
23
+ archives javadocJar
33
24
}
34
25
35
- def getRepositoryPassword () {
36
- return hasProperty( ' NEXUS_PASSWORD ' ) ? NEXUS_PASSWORD : " "
26
+ signing {
27
+ sign configurations . archives
37
28
}
38
29
39
- afterEvaluate { project ->
40
- uploadArchives {
41
- repositories {
42
- mavenDeployer {
43
- beforeDeployment { MavenDeployment deployment -> signing. signPom(deployment) }
44
-
45
- pom. groupId = GROUP
46
- pom. artifactId = POM_ARTIFACT_ID
47
- pom. version = VERSION_NAME
48
-
49
- repository(url : getReleaseRepositoryUrl()) {
50
- authentication(userName : getRepositoryUsername(), password : getRepositoryPassword())
51
- }
52
-
53
- snapshotRepository(url : getSnapshotRepositoryUrl()) {
54
- authentication(userName : getRepositoryUsername(), password : getRepositoryPassword())
30
+ publishing {
31
+ publications {
32
+ mavenJava(MavenPublication ) {
33
+ customizePom(pom)
34
+ groupId ' ug.sparkpl'
35
+ artifactId ' mtnmomo-java'
36
+ version ' 1.0.0'
37
+
38
+ from components. java
39
+
40
+ // create the sign pom artifact
41
+ pom. withXml {
42
+ def pomFile = file(" ${ project.buildDir} /generated-pom.xml" )
43
+ writeTo(pomFile)
44
+ def pomAscFile = signing. sign(pomFile). signatureFiles[0 ]
45
+ artifact(pomAscFile) {
46
+ classifier = null
47
+ extension = ' pom.asc'
55
48
}
49
+ }
56
50
57
- pom. project {
58
- name POM_NAME
59
- description POM_DESCRIPTION
60
- url POM_URL
61
- packaging POM_PACKAGING
62
-
63
- scm {
64
- url POM_SCM_URL
65
- connection POM_SCM_CONNECTION
66
- developerConnection POM_SCM_DEV_CONNECTION
67
- }
68
-
69
- licenses {
70
- license {
71
- name POM_LICENCE_NAME
72
- url POM_LICENCE_URL
73
- distribution POM_LICENCE_DIST
74
- }
75
- }
76
-
77
- developers {
78
- developer {
79
- id POM_DEVELOPER_ID
80
- name POM_DEVELOPER_NAME
81
- email POM_DEVELOPER_EMAIL
82
- }
83
- }
51
+ artifact(sourceJar) {
52
+ classifier = ' sources'
53
+ }
54
+ artifact(javadocJar) {
55
+ classifier = ' javadoc'
56
+ }
84
57
85
- organization {
86
- name POM_DEVELOPER_NAME
87
- url POM_ORGANIZATION_URL
58
+ // create the signed artifacts
59
+ project. tasks. signArchives. signatureFiles. each {
60
+ artifact(it) {
61
+ def matcher = it. file =~ / -(sources|javadoc)\. jar\. asc$/
62
+ if (matcher. find()) {
63
+ classifier = matcher. group(1 )
64
+ } else {
65
+ classifier = null
88
66
}
67
+ extension = ' jar.asc'
89
68
}
90
69
}
91
70
}
92
71
}
93
-
94
- signing {
95
- required { isReleaseBuild() &&
96
- (gradle. taskGraph. hasTask(" uploadArchives" ) || gradle. taskGraph. hasTask(" publish" ))}
97
- useGpgCmd()
98
- sign configurations. archives
72
+ repositories {
73
+ maven {
74
+ url " https://oss.sonatype.org/service/local/staging/deploy/maven2"
75
+ credentials {
76
+ username sonatypeUsername
77
+ password sonatypePassword
78
+ }
79
+ }
99
80
}
81
+ }
100
82
101
- tasks . withType( Sign ) {
102
- onlyIf { isReleaseBuild() && project . hasProperty( ' signing.gnupg.keyName ' ) }
103
- }
83
+ def customizePom ( pom ) {
84
+ pom . withXml {
85
+ def root = asNode()
104
86
105
- task makeJavadocs(type : Javadoc , dependsOn : delombok) {
106
- source = delombok. outputDir
107
- classpath = configurations. compile + configurations. annotationProcessor
108
- failOnError = true
109
- }
87
+ // eliminate test-scoped dependencies (no need in maven central POMs)
88
+ root. dependencies. removeAll { dep ->
89
+ dep. scope == " test"
90
+ }
110
91
111
- task makeJavadocsJar(type : Jar , dependsOn : makeJavadocs) {
112
- classifier = ' javadoc'
113
- from makeJavadocs. destinationDir
114
- }
92
+ // add all items necessary for maven central publication
93
+ root. children(). last() + {
94
+ resolveStrategy = Closure . DELEGATE_FIRST
115
95
116
- task sourcesJar(type : Jar , dependsOn : delombok) {
117
- classifier = ' sources'
118
- from delombok. outputDir
96
+ description ' MTN MOMO Java Bindings'
97
+ name ' https://momodeveloper.mtn.com/ Java'
98
+ url ' https://github.com/sparkplug/momoapi-java'
99
+ organization {
100
+ name ' ug.sparkpl'
101
+ url ' https://sparkpl.ug'
102
+ }
103
+ issueManagement {
104
+ system ' GitHub'
105
+ url ' https://github.com/sparkplug/momoapi-java/issues'
106
+ }
107
+ licenses {
108
+ license {
109
+ name ' The MIT License'
110
+ url ' https://raw.githubusercontent.com/sparkplug/momoapi-java/master/LICENSE'
111
+ distribution ' repo'
112
+ }
113
+ }
114
+ scm {
115
+ url ' https://github.com/sparkplug/momoapi-java'
116
+ connection ' scm:git@github.com/sparkplug/momoapi-java.git'
117
+ developerConnection ' scm:git:ssh://git@github.com:sparkplug/momoapi-java.git'
118
+ }
119
+ developers {
120
+ developer {
121
+ name ' Sparkplug'
122
+ }
123
+ }
124
+ }
119
125
}
126
+ }
120
127
121
- artifacts {
122
- archives jar
123
- archives sourcesJar
124
- archives makeJavadocsJar
128
+ model {
129
+ tasks. generatePomFileForMavenJavaPublication {
130
+ destination = file(" $buildDir /generated-pom.xml" )
131
+ }
132
+ tasks. publishMavenJavaPublicationToMavenLocal {
133
+ dependsOn project. tasks. signArchives
134
+ }
135
+ tasks. publishMavenJavaPublicationToMavenRepository {
136
+ dependsOn project. tasks. signArchives
125
137
}
126
138
}
0 commit comments