@@ -2,25 +2,27 @@ package com.jfrog.bintray.gradle
2
2
3
3
import com.jfrog.bintray.gradle.tasks.BintrayPublishTask
4
4
import com.jfrog.bintray.gradle.tasks.BintrayUploadTask
5
+ import org.gradle.BuildAdapter
5
6
import org.gradle.api.Project
6
7
import org.gradle.api.ProjectEvaluationListener
7
8
import org.gradle.api.ProjectState
8
9
import org.gradle.api.Task
10
+ import org.gradle.api.invocation.Gradle
9
11
import org.gradle.api.publish.Publication
10
12
import org.gradle.api.publish.PublishingExtension
11
13
import org.gradle.api.publish.maven.MavenPublication
12
14
import org.gradle.api.tasks.Upload
13
15
14
- class ProjectsEvaluatedBuildListener implements ProjectEvaluationListener {
15
- private Project project
16
+ import java.util.concurrent.ConcurrentHashMap
17
+
18
+ class ProjectsEvaluatedBuildListener extends BuildAdapter implements ProjectEvaluationListener {
16
19
private BintrayUploadTask bintrayUpload
17
- private BintrayExtension extension
20
+ private final Set< BintrayUploadTask > bintrayUploadTasks = Collections . newSetFromMap( new ConcurrentHashMap< Task , Boolean > ());
18
21
19
- ProjectsEvaluatedBuildListener (Project project , BintrayUploadTask bintrayUpload ) {
20
- this . project = project
22
+ ProjectsEvaluatedBuildListener (BintrayUploadTask bintrayUpload ) {
21
23
this . bintrayUpload = bintrayUpload
22
- extension = project. extensions. create(" bintray" , BintrayExtension , project)
23
- extension. with {
24
+ this . bintrayUpload . extension = bintrayUpload . project. extensions. create(" bintray" , BintrayExtension , bintrayUpload . project)
25
+ this . bintrayUpload . extension. with {
24
26
apiUrl = BintrayUploadTask . API_URL_DEFAULT
25
27
}
26
28
}
@@ -72,60 +74,67 @@ class ProjectsEvaluatedBuildListener implements ProjectEvaluationListener {
72
74
ossCloseRepo = extension. pkg. version. mavenCentralSync. close
73
75
}
74
76
75
- if (extension. configurations?. length) {
76
- extension. configurations. each {
77
- def configuration = project. configurations. findByName(it)
78
- if (! configuration) {
79
- project. logger. warn " Configuration ${ it} specified but does not exist in project {}." ,
80
- project. path
81
- } else {
82
- bintrayUpload. dependsOn(configuration. allArtifacts)
83
- }
84
- }
85
- Upload installTask = project. tasks. withType(Upload )?. findByName(' install' )
86
- if (installTask) {
87
- bintrayUpload. dependsOn(installTask)
88
- } else {
89
- project. logger. warn " Configuration(s) specified but the install task does not exist in project {}." ,
90
- project. path
91
- }
92
- }
93
- if (extension. publications?. length) {
94
- def publicationExt = project. extensions. findByType(PublishingExtension )
95
- if (! publicationExt) {
96
- project. logger. warn " Publications(s) specified but no publications exist in project {}." ,
97
- project. path
98
- } else {
99
- extension. publications. each {
100
- Publication publication = publicationExt?. publications?. findByName(it)
101
- if (! publication) {
102
- project. logger. warn ' Publication {} not found in project {}.' , it, project. path
103
- } else if (publication instanceof MavenPublication ) {
104
- def taskName =
105
- " publish${ it[0].toUpperCase()}${ it.substring(1)} PublicationToMavenLocal"
106
- bintrayUpload. dependsOn(taskName)
107
- } else {
108
- project. logger. warn " {} can only use maven publications - skipping {}." ,
109
- bintrayUpload. path, publication. name
110
- }
111
- }
112
- }
113
- }
77
+ bintrayUploadTasks. add(bintrayUpload)
114
78
115
- Task deployTask = project. getRootProject(). getTasks(). findByName(BintrayPublishTask . TASK_NAME )
116
- if (deployTask == null ) {
79
+ Task bintrayPublish = bintrayUpload . project. getRootProject(). getTasks(). findByName(BintrayPublishTask . TASK_NAME )
80
+ if (bintrayPublish == null ) {
117
81
throw new IllegalStateException (String . format(" Could not find %s in the root project" , BintrayPublishTask . TASK_NAME ))
118
82
}
119
- bintrayUpload. finalizedBy(deployTask )
83
+ bintrayUpload. finalizedBy(bintrayPublish )
120
84
// Depend on tasks in sub-projects
121
- project. subprojects. each {
85
+ bintrayUpload . project. subprojects. each {
122
86
Task subTask = it. tasks. findByName(BintrayUploadTask . TASK_NAME )
123
87
if (subTask) {
124
88
bintrayUpload. dependsOn(subTask)
125
89
}
126
90
}
127
- if (extension. filesSpec) {
128
- bintrayUpload. dependsOn(extension. filesSpec)
91
+ if (bintrayUpload. extension. filesSpec) {
92
+ bintrayUpload. dependsOn(bintrayUpload. extension. filesSpec)
93
+ }
94
+ }
95
+
96
+ @Override
97
+ void projectsEvaluated (Gradle gradle ) {
98
+ for (BintrayUploadTask bintrayUpload : bintrayUploadTasks) {
99
+ if (bintrayUpload. extension. configurations?. length) {
100
+ bintrayUpload. extension. configurations. each {
101
+ def configuration = bintrayUpload. project. configurations. findByName(it)
102
+ if (! configuration) {
103
+ bintrayUpload. project. logger. warn " Configuration ${ it} specified but does not exist in project {}." ,
104
+ bintrayUpload. project. path
105
+ } else {
106
+ bintrayUpload. dependsOn(configuration. allArtifacts)
107
+ }
108
+ }
109
+ Upload installTask = bintrayUpload. project. tasks. withType(Upload )?. findByName(' install' )
110
+ if (installTask) {
111
+ bintrayUpload. dependsOn(installTask)
112
+ } else {
113
+ bintrayUpload. project. logger. warn " Configuration(s) specified but the install task does not exist in project {}." ,
114
+ bintrayUpload. project. path
115
+ }
116
+ }
117
+ if (bintrayUpload. extension. publications?. length) {
118
+ def publicationExt = bintrayUpload. project. extensions. findByType(PublishingExtension )
119
+ if (! publicationExt) {
120
+ bintrayUpload. project. logger. warn " Publications(s) specified but no publications exist in project {}." ,
121
+ bintrayUpload. project. path
122
+ } else {
123
+ bintrayUpload. extension. publications. each {
124
+ Publication publication = publicationExt?. publications?. findByName(it)
125
+ if (! publication) {
126
+ bintrayUpload. project. logger. warn ' Publication {} not found in project {}.' , it, bintrayUpload. project. path
127
+ } else if (publication instanceof MavenPublication ) {
128
+ def taskName =
129
+ " publish${ it[0].toUpperCase()}${ it.substring(1)} PublicationToMavenLocal"
130
+ bintrayUpload. dependsOn(taskName)
131
+ } else {
132
+ bintrayUpload. project. logger. warn " {} can only use maven publications - skipping {}." ,
133
+ bintrayUpload. path, publication. name
134
+ }
135
+ }
136
+ }
137
+ }
129
138
}
130
139
}
131
140
}
0 commit comments