Skip to content

Commit 1e801c7

Browse files
AlexeiVainshteineyalbe4
authored andcommitted
Fix compatibility with java gradle plugin and Gradle 4.8 (#243)
* Issue 239 - Fix compatibility with java gradle plugin and Gradle 4.8 * Update version within build.gradle
1 parent 9cf07c8 commit 1e801c7

File tree

14 files changed

+469
-60
lines changed

14 files changed

+469
-60
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ buildscript {
88
}
99
dependencies {
1010
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
11-
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0"
11+
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.2"
1212
}
1313
}
1414

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
currentVersion=1.8.1
1+
currentVersion=1.8.2

src/main/groovy/com/jfrog/bintray/gradle/BintrayPlugin.groovy

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ class BintrayPlugin implements Plugin<Project> {
1010
if (project.getTasks().findByName(BintrayUploadTask.TASK_NAME) == null) {
1111
//Create and configure the task
1212
BintrayUploadTask bintrayUpload = project.task(type: BintrayUploadTask, BintrayUploadTask.TASK_NAME)
13-
project.gradle.addListener(new ProjectsEvaluatedBuildListener(project, bintrayUpload))
13+
bintrayUpload.project = project
14+
project.gradle.addListener(new ProjectsEvaluatedBuildListener(bintrayUpload))
1415
}
1516

1617
addBintrayUploadTask(project)
@@ -21,7 +22,8 @@ class BintrayPlugin implements Plugin<Project> {
2122
// Reached this state means that the plugin is not enabled on the root project
2223
BintrayUploadTask bintrayUploadRoot = project.getRootProject().task(type: BintrayUploadTask, BintrayUploadTask.TASK_NAME)
2324
bintrayUploadRoot.setEnabled(false)
24-
project.getRootProject().gradle.addListener(new ProjectsEvaluatedBuildListener(project.getRootProject(), bintrayUploadRoot))
25+
bintrayUploadRoot.project = project.getRootProject()
26+
project.getRootProject().gradle.addListener(new ProjectsEvaluatedBuildListener(bintrayUploadRoot))
2527
project.getRootProject().getPluginManager().apply(BintrayPlugin.class)
2628
}
2729
}

src/main/groovy/com/jfrog/bintray/gradle/ProjectsEvaluatedBuildListener.groovy

+61-52
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,27 @@ package com.jfrog.bintray.gradle
22

33
import com.jfrog.bintray.gradle.tasks.BintrayPublishTask
44
import com.jfrog.bintray.gradle.tasks.BintrayUploadTask
5+
import org.gradle.BuildAdapter
56
import org.gradle.api.Project
67
import org.gradle.api.ProjectEvaluationListener
78
import org.gradle.api.ProjectState
89
import org.gradle.api.Task
10+
import org.gradle.api.invocation.Gradle
911
import org.gradle.api.publish.Publication
1012
import org.gradle.api.publish.PublishingExtension
1113
import org.gradle.api.publish.maven.MavenPublication
1214
import org.gradle.api.tasks.Upload
1315

14-
class ProjectsEvaluatedBuildListener implements ProjectEvaluationListener {
15-
private Project project
16+
import java.util.concurrent.ConcurrentHashMap
17+
18+
class ProjectsEvaluatedBuildListener extends BuildAdapter implements ProjectEvaluationListener {
1619
private BintrayUploadTask bintrayUpload
17-
private BintrayExtension extension
20+
private final Set<BintrayUploadTask> bintrayUploadTasks = Collections.newSetFromMap(new ConcurrentHashMap<Task, Boolean>());
1821

19-
ProjectsEvaluatedBuildListener(Project project, BintrayUploadTask bintrayUpload) {
20-
this.project = project
22+
ProjectsEvaluatedBuildListener(BintrayUploadTask bintrayUpload) {
2123
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 {
2426
apiUrl = BintrayUploadTask.API_URL_DEFAULT
2527
}
2628
}
@@ -72,60 +74,67 @@ class ProjectsEvaluatedBuildListener implements ProjectEvaluationListener {
7274
ossCloseRepo = extension.pkg.version.mavenCentralSync.close
7375
}
7476

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)
11478

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) {
11781
throw new IllegalStateException(String.format("Could not find %s in the root project", BintrayPublishTask.TASK_NAME))
11882
}
119-
bintrayUpload.finalizedBy(deployTask)
83+
bintrayUpload.finalizedBy(bintrayPublish)
12084
// Depend on tasks in sub-projects
121-
project.subprojects.each {
85+
bintrayUpload.project.subprojects.each {
12286
Task subTask = it.tasks.findByName(BintrayUploadTask.TASK_NAME)
12387
if (subTask) {
12488
bintrayUpload.dependsOn(subTask)
12589
}
12690
}
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+
}
129138
}
130139
}
131140
}

src/main/groovy/com/jfrog/bintray/gradle/tasks/BintrayUploadTask.groovy

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jfrog.bintray.gradle.tasks
22

3+
import com.jfrog.bintray.gradle.BintrayExtension
34
import com.jfrog.bintray.gradle.BintrayHttpClientFactory
45
import com.jfrog.bintray.gradle.BintrayPlugin
56
import com.jfrog.bintray.gradle.Utils
@@ -11,6 +12,7 @@ import groovy.json.JsonBuilder
1112
import groovyx.net.http.HTTPBuilder
1213
import org.gradle.api.DefaultTask
1314
import org.gradle.api.GradleException
15+
import org.gradle.api.Project
1416
import org.gradle.api.artifacts.Configuration
1517
import org.gradle.api.file.CopySpec
1618
import org.gradle.api.publish.Publication
@@ -31,6 +33,8 @@ class BintrayUploadTask extends DefaultTask {
3133
static final String GROUP = 'publishing'
3234
static final String DESCRIPTION = 'Publishes artifacts to bintray.com.'
3335
static final String API_URL_DEFAULT = 'https://api.bintray.com'
36+
public BintrayExtension extension
37+
public Project project
3438

3539
private ConcurrentHashMap<String, Repository> repositories = new ConcurrentHashMap<>()
3640
private HTTPBuilder httpBuilder

src/test/groovy/com/jfrog/bintray/gradle/GradleBintrayPluginSpec.groovy

+26
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,32 @@ class GradleBintrayPluginSpec extends Specification {
219219
pkg.labels().sort() == config.pkgLabels.sort()
220220
}
221221

222+
def "[publicationWithJavaGradlePlugin]create package and version with publication"() {
223+
when:
224+
String version = PluginSpecUtils.createVersion()
225+
versions.add(version)
226+
savedVersion = version
227+
String[] tasks = ["clean", "build", "bintrayUpload"]
228+
def exitCode = PluginSpecUtils.launchGradle(testName.methodName, tasks, version)
229+
230+
then:
231+
// Gradle build finished successfully:
232+
exitCode == 0
233+
234+
String bintraySubject = getSubject()
235+
checkExistence(bintraySubject, config.mavenRepo as String, config.pkgName as String, version)
236+
237+
when:
238+
// Get the created package:
239+
Pkg pkg = bintray.subject(bintraySubject).repository(config.mavenRepo)
240+
.pkg(config.pkgName).get()
241+
242+
then:
243+
pkg.name() == config.pkgName
244+
pkg.description() == config.pkgDesc
245+
pkg.labels().sort() == config.pkgLabels.sort()
246+
}
247+
222248
def "[publication]override"() {
223249
setup:
224250
String[] tasks = ["clean", "build", "bintrayUpload"]

src/test/resources/gradle/projects/configuration/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ buildscript {
44
jcenter()
55
}
66
dependencies {
7-
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1"
7+
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.2"
88
}
99
}
1010

src/test/resources/gradle/projects/configurationWithSubModules/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ buildscript {
44
jcenter()
55
}
66
dependencies {
7-
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1"
7+
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.2"
88
}
99
}
1010

src/test/resources/gradle/projects/fileSpec/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildscript {
55
}
66

77
dependencies {
8-
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1"
8+
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.2"
99
}
1010
}
1111

src/test/resources/gradle/projects/publication/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildscript {
55
}
66

77
dependencies {
8-
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1"
8+
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.2"
99
}
1010
}
1111

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
buildscript {
2+
repositories {
3+
mavenLocal()
4+
jcenter()
5+
}
6+
7+
dependencies {
8+
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.2"
9+
}
10+
}
11+
12+
def rootProjectDir = projectDir
13+
def testsDir = new File(rootProjectDir.getParentFile().getParentFile(), 'buildFiles')
14+
def projectUrl = 'https://github.com/bintray/gradle-bintray-plugin'
15+
16+
def getTestFile = { fileName ->
17+
testsDir.toString() + '/' + fileName
18+
}
19+
20+
allprojects {
21+
apply plugin: 'idea'
22+
apply plugin: 'java-gradle-plugin'
23+
24+
group = pkgName
25+
version = versionName
26+
}
27+
28+
subprojects {
29+
apply plugin: 'java'
30+
apply plugin: 'maven-publish'
31+
apply plugin: 'com.jfrog.bintray'
32+
33+
sourceCompatibility = 1.7
34+
targetCompatibility = 1.7
35+
36+
dependencies {
37+
testCompile 'junit:junit:4.7'
38+
}
39+
40+
// custom tasks for creating source/javadoc jars
41+
task sourcesJar(type: Jar, dependsOn: classes) {
42+
classifier = 'sources'
43+
from sourceSets.main.allSource
44+
}
45+
46+
task javadocJar(type: Jar, dependsOn: javadoc) {
47+
classifier = 'javadoc'
48+
from javadoc.destinationDir
49+
}
50+
51+
// add javadoc/source jar tasks as artifacts
52+
artifacts {
53+
archives sourcesJar, javadocJar
54+
}
55+
56+
repositories {
57+
jcenter()
58+
}
59+
60+
publishing {
61+
publications {
62+
mavenJava(MavenPublication) {
63+
if (plugins.hasPlugin('war')) {
64+
from components.web
65+
} else {
66+
from components.java
67+
}
68+
69+
artifact sourcesJar {
70+
classifier "sources"
71+
}
72+
73+
artifact javadocJar {
74+
classifier "javadoc"
75+
}
76+
77+
pom.withXml {
78+
asNode().children().last() + {
79+
resolveStrategy = Closure.DELEGATE_FIRST
80+
name 'project-name'
81+
description 'description for project'
82+
url projectUrl
83+
scm {
84+
url projectUrl
85+
connection projectUrl
86+
developerConnection projectUrl
87+
}
88+
licenses {
89+
license {
90+
name 'The Apache Software License, Version 2.0'
91+
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
92+
distribution 'repo'
93+
}
94+
}
95+
developers {
96+
developer {
97+
id 'JFrog'
98+
name 'JFrogDev'
99+
100+
}
101+
}
102+
}
103+
}
104+
}
105+
}
106+
}
107+
108+
apply from: getTestFile("${testName}.gradle")
109+
}
110+
111+
task wrapper(type: Wrapper) {
112+
gradleVersion = '1.10'
113+
}

0 commit comments

Comments
 (0)