parent
							
								
									88fd834d6b
								
							
						
					
					
						commit
						6b3918ff7b
					
				|  | @ -1,6 +1,5 @@ | |||
| buildscript { | ||||
| 	dependencies { | ||||
| 		classpath 'io.spring.gradle:spring-build-conventions:0.0.37' | ||||
| 		classpath "io.spring.javaformat:spring-javaformat-gradle-plugin:$springJavaformatVersion" | ||||
| 		classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion" | ||||
| 		classpath 'io.spring.nohttp:nohttp-gradle:0.0.5.RELEASE' | ||||
|  | @ -75,4 +74,6 @@ if (hasProperty('buildScan')) { | |||
| 
 | ||||
| nohttp { | ||||
| 	allowlistFile = project.file("etc/nohttp/allowlist.lines") | ||||
| 	source.exclude "buildSrc/build/**" | ||||
| 	 | ||||
| } | ||||
|  |  | |||
|  | @ -1,7 +1,14 @@ | |||
| apply plugin: "java-gradle-plugin" | ||||
| apply plugin: 'java' | ||||
| apply plugin: 'groovy' | ||||
| 
 | ||||
| sourceCompatibility = 1.8 | ||||
| 
 | ||||
| repositories { | ||||
| 	jcenter() | ||||
| 	gradlePluginPortal() | ||||
| 	mavenCentral() | ||||
| 	maven { url 'https://repo.spring.io/plugins-release/' } | ||||
| } | ||||
| 
 | ||||
| gradlePlugin { | ||||
|  | @ -17,12 +24,34 @@ gradlePlugin { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
| 	compile 'com.thaiopensource:trang:20091111' | ||||
| 	compile 'net.sourceforge.saxon:saxon:9.1.0.8' | ||||
| configurations { | ||||
| 	implementation { | ||||
| 		exclude module: 'groovy-all' | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| task ide(type: Copy)  { | ||||
| 	from configurations.runtime | ||||
| 	into 'ide' | ||||
| dependencies { | ||||
| 	implementation 'com.thaiopensource:trang:20091111' | ||||
| 	implementation 'net.sourceforge.saxon:saxon:9.1.0.8' | ||||
| 	implementation localGroovy() | ||||
| 
 | ||||
| 	implementation 'com.github.ben-manes:gradle-versions-plugin:0.25.0' | ||||
| 	implementation 'gradle.plugin.org.gretty:gretty:3.0.1' | ||||
| 	implementation 'io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.21.1' | ||||
| 	implementation 'io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE' | ||||
| 	implementation 'io.spring.gradle:docbook-reference-plugin:0.3.1' | ||||
| 	implementation 'io.spring.gradle:propdeps-plugin:0.0.10.RELEASE' | ||||
| 	implementation 'io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.15' | ||||
| 	implementation 'io.spring.nohttp:nohttp-gradle:0.0.5.RELEASE' | ||||
| 	implementation 'org.asciidoctor:asciidoctor-gradle-jvm:3.1.0' | ||||
| 	implementation 'org.asciidoctor:asciidoctor-gradle-jvm-pdf:3.1.0' | ||||
| 	implementation 'org.hidetake:gradle-ssh-plugin:2.10.1' | ||||
| 	implementation 'org.jfrog.buildinfo:build-info-extractor-gradle:4.9.10' | ||||
| 	implementation 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1' | ||||
| 
 | ||||
| 	testImplementation 'junit:junit:4.12' | ||||
| 	testImplementation 'org.apache.commons:commons-io:1.3.2' | ||||
| 	testImplementation 'org.assertj:assertj-core:3.13.2' | ||||
| 	testImplementation 'org.mockito:mockito-core:3.0.0' | ||||
| 	testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5' | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,88 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import io.spring.gradle.propdeps.PropDepsMavenPlugin; | ||||
| import org.gradle.api.Plugin; | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.plugins.GroovyPlugin; | ||||
| import org.gradle.api.plugins.JavaPlugin; | ||||
| import org.gradle.api.plugins.MavenPlugin; | ||||
| import org.gradle.api.plugins.PluginManager; | ||||
| import org.gradle.internal.impldep.org.apache.maven.Maven; | ||||
| import org.gradle.plugins.ide.eclipse.EclipseWtpPlugin; | ||||
| import org.gradle.plugins.ide.idea.IdeaPlugin; | ||||
| import io.spring.gradle.propdeps.PropDepsEclipsePlugin; | ||||
| import io.spring.gradle.propdeps.PropDepsIdeaPlugin; | ||||
| import io.spring.gradle.propdeps.PropDepsPlugin; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public abstract class AbstractSpringJavaPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public final void apply(Project project) { | ||||
| 		PluginManager pluginManager = project.getPluginManager(); | ||||
| 		pluginManager.apply(JavaPlugin.class); | ||||
| 		pluginManager.apply(ManagementConfigurationPlugin.class); | ||||
| 		if (project.file("src/main/groovy").exists() | ||||
| 				|| project.file("src/test/groovy").exists() | ||||
| 				|| project.file("src/integration-test/groovy").exists()) { | ||||
| 			pluginManager.apply(GroovyPlugin.class); | ||||
| 		} | ||||
| 		pluginManager.apply("io.spring.convention.repository"); | ||||
| 		pluginManager.apply(EclipseWtpPlugin); | ||||
| 		pluginManager.apply(IdeaPlugin); | ||||
| 		pluginManager.apply(PropDepsPlugin); | ||||
| 		pluginManager.apply(PropDepsEclipsePlugin); | ||||
| 		pluginManager.apply(PropDepsIdeaPlugin); | ||||
| 		project.getPlugins().withType(MavenPlugin) { | ||||
| 			pluginManager.apply(PropDepsMavenPlugin); | ||||
| 		} | ||||
| 		pluginManager.apply("io.spring.convention.tests-configuration"); | ||||
| 		pluginManager.apply("io.spring.convention.integration-test"); | ||||
| 		pluginManager.apply("io.spring.convention.springdependencymangement"); | ||||
| 		pluginManager.apply("io.spring.convention.dependency-set"); | ||||
| 		pluginManager.apply("io.spring.convention.javadoc-options"); | ||||
| 		pluginManager.apply("io.spring.convention.checkstyle"); | ||||
| 		pluginManager.apply('com.github.ben-manes.versions'); | ||||
| 
 | ||||
| 		copyPropertyFromRootProjectTo("group", project); | ||||
| 		copyPropertyFromRootProjectTo("version", project); | ||||
| 		copyPropertyFromRootProjectTo("description", project); | ||||
| 
 | ||||
| 		project.jar { | ||||
| 			manifest.attributes["Created-By"] = | ||||
| 					"${System.getProperty("java.version")} (${System.getProperty("java.specification.vendor")})" | ||||
| 			manifest.attributes["Implementation-Title"] = project.name | ||||
| 			manifest.attributes["Implementation-Version"] = project.version | ||||
| 			manifest.attributes["Automatic-Module-Name"] = project.name.replace('-', '.') | ||||
| 		} | ||||
| 		additionalPlugins(project); | ||||
| 	} | ||||
| 
 | ||||
| 	private void copyPropertyFromRootProjectTo(String propertyName, Project project) { | ||||
| 		Project rootProject = project.getRootProject(); | ||||
| 		Object property = rootProject.findProperty(propertyName); | ||||
| 		if(property != null) { | ||||
| 			project.setProperty(propertyName, property); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	protected abstract void additionalPlugins(Project project); | ||||
| } | ||||
|  | @ -0,0 +1,58 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| class ArtifactoryPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	void apply(Project project) { | ||||
| 		project.plugins.apply('com.jfrog.artifactory') | ||||
| 		String name = Utils.getProjectName(project); | ||||
| 		boolean isSnapshot = Utils.isSnapshot(project); | ||||
| 		boolean isMilestone = Utils.isMilestone(project); | ||||
| 		project.artifactory { | ||||
| 			contextUrl = 'https://repo.spring.io' | ||||
| 			publish { | ||||
| 				repository { | ||||
| 					repoKey = isSnapshot ? 'libs-snapshot-local' : isMilestone ? 'libs-milestone-local' : 'libs-release-local' | ||||
| 					if(project.hasProperty('artifactoryUsername')) { | ||||
| 						username = artifactoryUsername | ||||
| 						password = artifactoryPassword | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.artifactoryPublish { | ||||
| 			publishIvy false | ||||
| 			properties = [ | ||||
| 					'bintray.package': "${project.group}:${name}", | ||||
| 					'bintray.version': "${project.version}" | ||||
| 			] | ||||
| 		} | ||||
| 
 | ||||
| 		project.artifactory { | ||||
| 			publish { | ||||
| 				defaults { | ||||
| 					publishConfigs('archives') | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,49 @@ | |||
| /* | ||||
|  * Copyright 2016-2019 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| 
 | ||||
| /** | ||||
|  * Adds and configures Checkstyle plugin. | ||||
|  * | ||||
|  * @author Vedran Pavic | ||||
|  */ | ||||
| class CheckstylePlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	final CHECKSTYLE_DIR = 'etc/checkstyle' | ||||
| 
 | ||||
| 	@Override | ||||
| 	void apply(Project project) { | ||||
| 		project.plugins.withType(JavaPlugin) { | ||||
| 			def checkstyleDir = project.rootProject.file(CHECKSTYLE_DIR) | ||||
| 			if (checkstyleDir.exists() && checkstyleDir.directory) { | ||||
| 				project.getPluginManager().apply('checkstyle') | ||||
| 				project.dependencies.add('checkstyle', 'io.spring.javaformat:spring-javaformat-checkstyle:0.0.15') | ||||
| 				project.dependencies.add('checkstyle', 'io.spring.nohttp:nohttp-checkstyle:0.0.3.RELEASE') | ||||
| 
 | ||||
| 				project.checkstyle { | ||||
| 					configDir = checkstyleDir | ||||
| 					toolVersion = '8.21' | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,61 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.artifacts.component.ModuleComponentSelector | ||||
| import org.gradle.api.tasks.Input | ||||
| import org.gradle.api.tasks.Internal; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.FileOutputStream; | ||||
| import java.io.IOException; | ||||
| import java.io.OutputStream; | ||||
| import java.util.Map; | ||||
| import java.util.Properties; | ||||
| 
 | ||||
| import org.gradle.api.DefaultTask; | ||||
| import org.gradle.api.artifacts.Configuration; | ||||
| import org.gradle.api.tasks.TaskAction; | ||||
| 
 | ||||
| import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension; | ||||
| 
 | ||||
| public class DependencyManagementExportTask extends DefaultTask { | ||||
| 	@Internal | ||||
| 	def projects; | ||||
| 
 | ||||
| 	@Input | ||||
| 	String getProjectNames() { | ||||
| 		return projects*.name | ||||
| 	} | ||||
| 
 | ||||
| 	@TaskAction | ||||
| 	public void dependencyManagementExport() throws IOException { | ||||
| 		def projects = this.projects ?: project.subprojects + project | ||||
| 		def configurations = projects*.configurations*.findAll { ['testRuntime','integrationTestRuntime','grettyRunnerTomcat8','ajtools'].contains(it.name) } | ||||
| 		def dependencyResults = configurations*.incoming*.resolutionResult*.allDependencies.flatten() | ||||
| 		def moduleVersionVersions = dependencyResults.findAll { r -> r.requested instanceof ModuleComponentSelector }.collect { r-> r.selected.moduleVersion } | ||||
| 
 | ||||
| 		def projectDependencies = projects.collect { p-> "${p.group}:${p.name}:${p.version}".toString() } as Set | ||||
| 		def dependencies = moduleVersionVersions.collect { d -> | ||||
| 			"${d.group}:${d.name}:${d.version}".toString() | ||||
| 		}.sort() as Set | ||||
| 
 | ||||
| 		println '' | ||||
| 		println '' | ||||
| 		println 'dependencyManagement {' | ||||
| 		println '\tdependencies {' | ||||
| 		dependencies.findAll { d-> !projectDependencies.contains(d)}.each { | ||||
| 			println "\t\tdependency '$it'" | ||||
| 		} | ||||
| 		println '\t}' | ||||
| 		println '}' | ||||
| 		println '' | ||||
| 		println '' | ||||
| 		println 'TIP Use this to find duplicates:\n$ sort gradle/dependency-management.gradle| uniq -c | grep -v \'^\\s*1\'' | ||||
| 		println '' | ||||
| 		println '' | ||||
| 	} | ||||
| 
 | ||||
| 	void setOutputFile(File file) throws IOException { | ||||
| 		this.output = new FileOutputStream(file); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,126 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| 
 | ||||
| /** | ||||
|  * Adds sets of dependencies to make it easy to add a grouping of dependencies. The | ||||
|  * dependencies added are: | ||||
|  * | ||||
|  * <ul> | ||||
|  * <li>sockDependencies</li> | ||||
|  * <li>seleniumDependencies</li> | ||||
|  * <li>gebDependencies</li> | ||||
|  * <li>powerMockDependencies</li> | ||||
|  * <li>slf4jDependencies</li> | ||||
|  * <li>jstlDependencies</li> | ||||
|  * <li>apachedsDependencies</li> | ||||
|  * </ul> | ||||
|  * | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class DependencySetPlugin implements Plugin<Project> { | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 
 | ||||
| 		project.ext.spockDependencies = [ | ||||
| 			project.dependencies.create("org.spockframework:spock-spring") { | ||||
| 				exclude group: 'junit', module: 'junit-dep' | ||||
| 			}, | ||||
| 			project.dependencies.create("org.spockframework:spock-core") { | ||||
| 				exclude group: 'junit', module: 'junit-dep' | ||||
| 			} | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.seleniumDependencies = [ | ||||
| 				"org.seleniumhq.selenium:htmlunit-driver", | ||||
| 				"org.seleniumhq.selenium:selenium-support" | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.gebDependencies = project.spockDependencies + | ||||
| 			project.seleniumDependencies + [ | ||||
| 			"org.gebish:geb-spock", | ||||
| 			'commons-httpclient:commons-httpclient', | ||||
| 			"org.codehaus.groovy:groovy", | ||||
| 			"org.codehaus.groovy:groovy-all" | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.powerMockDependencies = [ | ||||
| 				"org.powermock:powermock-core", | ||||
| 				"org.powermock:powermock-api-support", | ||||
| 				"org.powermock:powermock-module-junit4-common", | ||||
| 				"org.powermock:powermock-module-junit4", | ||||
| 				project.dependencies.create("org.powermock:powermock-api-mockito") { | ||||
| 					exclude group: 'org.mockito', module: 'mockito-all' | ||||
| 				}, | ||||
| 				"org.powermock:powermock-reflect" | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.powerMock2Dependencies = [ | ||||
| 				"org.powermock:powermock-core", | ||||
| 				"org.powermock:powermock-api-support", | ||||
| 				"org.powermock:powermock-module-junit4-common", | ||||
| 				"org.powermock:powermock-module-junit4", | ||||
| 				project.dependencies.create("org.powermock:powermock-api-mockito2") { | ||||
| 					exclude group: 'org.mockito', module: 'mockito-all' | ||||
| 				}, | ||||
| 				"org.powermock:powermock-reflect" | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.slf4jDependencies = [ | ||||
| 			"org.slf4j:slf4j-api", | ||||
| 			"org.slf4j:jcl-over-slf4j", | ||||
| 			"org.slf4j:log4j-over-slf4j", | ||||
| 			"ch.qos.logback:logback-classic" | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.springCoreDependency = [ | ||||
| 			project.dependencies.create("org.springframework:spring-core") { | ||||
| 				exclude(group: 'commons-logging', module: 'commons-logging') | ||||
| 			} | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.testDependencies = [ | ||||
| 			"junit:junit", | ||||
| 			"org.mockito:mockito-core", | ||||
| 			"org.springframework:spring-test", | ||||
| 			"org.assertj:assertj-core" | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.jstlDependencies = [ | ||||
| 				"javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api", | ||||
| 				"org.apache.taglibs:taglibs-standard-jstlel" | ||||
| 		] | ||||
| 
 | ||||
| 		project.ext.apachedsDependencies = [ | ||||
| 				"org.apache.directory.server:apacheds-core", | ||||
| 				"org.apache.directory.server:apacheds-core-entry", | ||||
| 				"org.apache.directory.server:apacheds-protocol-shared", | ||||
| 				"org.apache.directory.server:apacheds-protocol-ldap", | ||||
| 				"org.apache.directory.server:apacheds-server-jndi", | ||||
| 				'org.apache.directory.shared:shared-ldap' | ||||
| 		] | ||||
| 
 | ||||
| 		project.plugins.withType(JavaPlugin) { | ||||
| 			project.dependencies { | ||||
| 				testCompile project.testDependencies | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,82 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.api.tasks.bundling.Zip | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| public class DeployDocsPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		project.getPluginManager().apply('org.hidetake.ssh') | ||||
| 
 | ||||
| 		project.ssh.settings { | ||||
| 			knownHosts = allowAnyHosts | ||||
| 		} | ||||
| 		project.remotes { | ||||
| 			docs { | ||||
| 				role 'docs' | ||||
| 				if (project.hasProperty('deployDocsHost')) { | ||||
| 					host = project.findProperty('deployDocsHost') | ||||
| 				} else { | ||||
| 					host = 'docs.af.pivotal.io' | ||||
| 				} | ||||
| 				retryCount = 5 // retry 5 times (default is 0) | ||||
| 				retryWaitSec = 10 // wait 10 seconds between retries (default is 0) | ||||
| 				user = project.findProperty('deployDocsSshUsername') | ||||
| 				if (project.hasProperty('deployDocsSshKeyPath')) { | ||||
| 					identity = project.file(project.findProperty('deployDocsSshKeyPath')) | ||||
| 				} else if (project.hasProperty('deployDocsSshKey')) { | ||||
| 					identity = project.findProperty('deployDocsSshKey') | ||||
| 				} | ||||
| 				if(project.hasProperty('deployDocsSshPassphrase')) { | ||||
| 					passphrase = project.findProperty('deployDocsSshPassphrase') | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.task('deployDocs') { | ||||
| 			dependsOn 'docsZip' | ||||
| 			doFirst { | ||||
| 				project.ssh.run { | ||||
| 					session(project.remotes.docs) { | ||||
| 						def now = System.currentTimeMillis() | ||||
| 						def name = project.rootProject.name | ||||
| 						def version = project.rootProject.version | ||||
| 						def tempPath = "/tmp/${name}-${now}-docs/".replaceAll(' ', '_') | ||||
| 						execute "mkdir -p $tempPath" | ||||
| 
 | ||||
| 						project.tasks.docsZip.outputs.each { o -> | ||||
| 							put from: o.files, into: tempPath | ||||
| 						} | ||||
| 
 | ||||
| 						execute "unzip $tempPath*.zip -d $tempPath" | ||||
| 
 | ||||
| 						def extractPath = "/var/www/domains/spring.io/docs/htdocs/autorepo/docs/${name}/${version}/" | ||||
| 
 | ||||
| 						execute "rm -rf $extractPath" | ||||
| 						execute "mkdir -p $extractPath" | ||||
| 						execute "mv $tempPath/docs/* $extractPath" | ||||
| 						execute "chmod -R g+w $extractPath" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,73 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask | ||||
| import org.gradle.api.Action | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.Task | ||||
| import org.gradle.api.artifacts.Configuration | ||||
| import org.gradle.api.artifacts.DependencySet | ||||
| import org.gradle.api.plugins.PluginManager | ||||
| import org.gradle.api.tasks.Sync | ||||
| import org.gradle.api.tasks.bundling.Zip | ||||
| 
 | ||||
| /** | ||||
|  * Aggregates asciidoc, javadoc, and deploying of the docs into a single plugin | ||||
|  */ | ||||
| public class DocsPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 
 | ||||
| 		PluginManager pluginManager = project.getPluginManager(); | ||||
| 		pluginManager.apply("org.asciidoctor.jvm.convert"); | ||||
| 		pluginManager.apply("org.asciidoctor.jvm.pdf"); | ||||
| 		pluginManager.apply(AsciidoctorConventionPlugin); | ||||
| 		pluginManager.apply(DeployDocsPlugin); | ||||
| 		pluginManager.apply(JavadocApiPlugin); | ||||
| 
 | ||||
| 		String projectName = Utils.getProjectName(project); | ||||
| 		String pdfFilename = projectName + "-reference.pdf"; | ||||
| 
 | ||||
| 		project.tasks.withType(AbstractAsciidoctorTask) { t -> | ||||
| 			project.configure(t) { | ||||
| 				sources { | ||||
| 					include "**/*.adoc" | ||||
| 					exclude '_*/**' | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 
 | ||||
| 		Task docsZip = project.tasks.create('docsZip', Zip) { | ||||
| 			dependsOn 'api', 'asciidoctor' | ||||
| 			group = 'Distribution' | ||||
| 			baseName = project.rootProject.name | ||||
| 			classifier = 'docs' | ||||
| 			description = "Builds -${classifier} archive containing all " + | ||||
| 				"Docs for deployment at docs.spring.io" | ||||
| 
 | ||||
| 			from(project.tasks.asciidoctor.outputs) { | ||||
| 				into 'reference/html5' | ||||
| 				include '**' | ||||
| 			} | ||||
| 			from(project.tasks.asciidoctorPdf.outputs) { | ||||
| 				into 'reference/pdf' | ||||
| 				include '**' | ||||
| 				rename "index.pdf", pdfFilename | ||||
| 			} | ||||
| 			from(project.tasks.api.outputs) { | ||||
| 				into 'api' | ||||
| 			} | ||||
| 			into 'docs' | ||||
| 			duplicatesStrategy 'exclude' | ||||
| 		} | ||||
| 
 | ||||
| 		Task docs = project.tasks.create("docs") { | ||||
| 			group = 'Documentation' | ||||
| 			description 'An aggregator task to generate all the documentation' | ||||
| 			dependsOn docsZip | ||||
| 		} | ||||
| 		project.tasks.assemble.dependsOn docs | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,121 @@ | |||
| /* | ||||
|  * Copyright 2016-2018 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.propdeps.PropDepsPlugin | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.Task | ||||
| import org.gradle.api.plugins.GroovyPlugin | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.api.tasks.testing.Test | ||||
| import org.gradle.plugins.ide.eclipse.EclipsePlugin | ||||
| import org.gradle.plugins.ide.idea.IdeaPlugin | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * Adds support for integration tests to java projects. | ||||
|  * | ||||
|  * <ul> | ||||
|  * <li>Adds integrationTestCompile and integrationTestRuntime configurations</li> | ||||
|  * <li>A new source test folder of src/integration-test/java has been added</li> | ||||
|  * <li>A task to run integration tests named integrationTest is added</li> | ||||
|  * <li>If Groovy plugin is added a new source test folder src/integration-test/groovy is added</li> | ||||
|  * </ul> | ||||
|  * | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class IntegrationTestPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		project.plugins.withType(JavaPlugin.class) { | ||||
| 			applyJava(project) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private applyJava(Project project) { | ||||
| 		if(!project.file('src/integration-test/').exists()) { | ||||
| 			// ensure we don't add if no tests to avoid adding Gretty | ||||
| 			return | ||||
| 		} | ||||
| 		project.configurations { | ||||
| 			integrationTestCompile { | ||||
| 				extendsFrom testCompile | ||||
| 			} | ||||
| 			integrationTestRuntime { | ||||
| 				extendsFrom integrationTestCompile, testRuntime | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.sourceSets { | ||||
| 			integrationTest { | ||||
| 				java.srcDir project.file('src/integration-test/java') | ||||
| 				resources.srcDir project.file('src/integration-test/resources') | ||||
| 				compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile | ||||
| 				runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		Task integrationTestTask = project.tasks.create("integrationTest", Test) { | ||||
| 			group = 'Verification' | ||||
| 			description = 'Runs the integration tests.' | ||||
| 			dependsOn 'jar' | ||||
| 			testClassesDirs = project.sourceSets.integrationTest.output.classesDirs | ||||
| 			classpath = project.sourceSets.integrationTest.runtimeClasspath | ||||
| 			shouldRunAfter project.tasks.test | ||||
| 		} | ||||
| 		project.tasks.check.dependsOn integrationTestTask | ||||
| 
 | ||||
| 		project.plugins.withType(IdeaPlugin) { | ||||
| 			project.idea { | ||||
| 				module { | ||||
| 					testSourceDirs += project.file('src/integration-test/java') | ||||
| 					scopes.TEST.plus += [ project.configurations.integrationTestCompile ] | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.plugins.withType(GroovyPlugin) { | ||||
| 			project.sourceSets { | ||||
| 				integrationTest { | ||||
| 					groovy.srcDirs project.file('src/integration-test/groovy') | ||||
| 				} | ||||
| 			} | ||||
| 			project.plugins.withType(IdeaPlugin) { | ||||
| 				project.idea { | ||||
| 					module { | ||||
| 						testSourceDirs += project.file('src/integration-test/groovy') | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.plugins.withType(PropDepsPlugin) { | ||||
| 			project.configurations { | ||||
| 				integrationTestCompile { | ||||
| 					extendsFrom optional, provided | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.plugins.withType(EclipsePlugin) { | ||||
| 			project.eclipse.classpath { | ||||
| 				plusConfigurations += [ project.configurations.integrationTestCompile ] | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,41 @@ | |||
| /* | ||||
|  * Copyright 2016-2018 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| 
 | ||||
| /** | ||||
|  * Adds a version of jacoco to use and makes check depend on jacocoTestReport. | ||||
|  * | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| class JacocoPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	void apply(Project project) { | ||||
| 		project.plugins.withType(JavaPlugin) { | ||||
| 			project.getPluginManager().apply("jacoco") | ||||
| 			project.tasks.check.dependsOn project.tasks.jacocoTestReport | ||||
| 
 | ||||
| 			project.jacoco { | ||||
| 				toolVersion = '0.8.2' | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,105 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.Collections; | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
| import java.util.regex.Pattern; | ||||
| 
 | ||||
| import org.gradle.api.Action; | ||||
| import org.gradle.api.Plugin; | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.plugins.JavaPluginConvention; | ||||
| import org.gradle.api.tasks.SourceSet; | ||||
| import org.gradle.api.tasks.javadoc.Javadoc; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class JavadocApiPlugin implements Plugin<Project> { | ||||
| 	Logger logger = LoggerFactory.getLogger(getClass()); | ||||
| 	Set<Pattern> excludes = Collections.singleton(Pattern.compile("test")); | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		logger.info("Applied"); | ||||
| 		Project rootProject = project.getRootProject(); | ||||
| 
 | ||||
| 
 | ||||
| 		//Task docs = project.getTasks().findByPath("docs") ?: project.getTasks().create("docs"); | ||||
| 		Javadoc api = project.getTasks().create("api", Javadoc); | ||||
| 
 | ||||
| 		api.setGroup("Documentation"); | ||||
| 		api.setDescription("Generates aggregated Javadoc API documentation."); | ||||
| 
 | ||||
| 		Set<Project> subprojects = rootProject.getSubprojects(); | ||||
| 		for (Project subproject : subprojects) { | ||||
| 			addProject(api, subproject); | ||||
| 		} | ||||
| 
 | ||||
| 		if (subprojects.isEmpty()) { | ||||
| 			addProject(api, project); | ||||
| 		} | ||||
| 
 | ||||
| 		api.setMaxMemory("1024m"); | ||||
| 		api.setDestinationDir(new File(project.getBuildDir(), "api")); | ||||
| 
 | ||||
| 		project.getPluginManager().apply("io.spring.convention.javadoc-options"); | ||||
| 	} | ||||
| 
 | ||||
| 	public void setExcludes(String... excludes) { | ||||
| 		if(excludes == null) { | ||||
| 			this.excludes = Collections.emptySet(); | ||||
| 		} | ||||
| 		this.excludes = new HashSet<Pattern>(excludes.length); | ||||
| 		for(String exclude : excludes) { | ||||
| 			this.excludes.add(Pattern.compile(exclude)); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void addProject(final Javadoc api, final Project project) { | ||||
| 		for(Pattern exclude : excludes) { | ||||
| 			if(exclude.matcher(project.getName()).matches()) { | ||||
| 				logger.info("Skipping {} because it is excluded by {}", project, exclude); | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 		logger.info("Try add sources for {}", project); | ||||
| 		project.getPlugins().withType(SpringModulePlugin.class).all(new Action<SpringModulePlugin>() { | ||||
| 			@Override | ||||
| 			public void execute(SpringModulePlugin plugin) { | ||||
| 				logger.info("Added sources for {}", project); | ||||
| 
 | ||||
| 				JavaPluginConvention java = project.getConvention().getPlugin(JavaPluginConvention.class); | ||||
| 				SourceSet mainSourceSet = java.getSourceSets().getByName("main"); | ||||
| 
 | ||||
| 				api.setSource(api.getSource().plus(mainSourceSet.getAllJava())); | ||||
| 				project.getTasks().withType(Javadoc.class).all(new Action<Javadoc>() { | ||||
| 					@Override | ||||
| 					public void execute(Javadoc projectJavadoc) { | ||||
| 						api.setClasspath(api.getClasspath().plus(projectJavadoc.getClasspath())); | ||||
| 					} | ||||
| 				}); | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -0,0 +1,15 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.tasks.javadoc.Javadoc | ||||
| 
 | ||||
| public class JavadocOptionsPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		project.getTasks().withType(Javadoc).all { t-> | ||||
| 			t.options.addStringOption('Xdoclint:none', '-quiet') | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,33 @@ | |||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Action; | ||||
| import org.gradle.api.Plugin; | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.artifacts.Configuration; | ||||
| 
 | ||||
| /** | ||||
|  * https://github.com/gradle/gradle/issues/7576#issuecomment-434637595 | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class ManagementConfigurationPlugin implements Plugin<Project> { | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		Configuration management = project.getConfigurations() | ||||
| 			.create("management", new Action<Configuration>() { | ||||
| 				@Override | ||||
| 				public void execute(Configuration configuration) { | ||||
| 					configuration.setCanBeResolved(false); | ||||
| 					configuration.setCanBeConsumed(false); | ||||
| 					configuration.setDescription("Used for setting Gradle constraints that impact all configurations that can be resolved"); | ||||
| 				} | ||||
| 			}); | ||||
| 		project.getConfigurations().all(new Action<Configuration>() { | ||||
| 			@Override | ||||
| 			public void execute(Configuration configuration) { | ||||
| 				if (configuration.isCanBeResolved()) { | ||||
| 					configuration.extendsFrom(management); | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,54 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.api.plugins.MavenPlugin | ||||
| import org.gradle.plugins.signing.SigningPlugin | ||||
| import org.sonarqube.gradle.SonarQubePlugin | ||||
| 
 | ||||
| public class MavenBomPlugin implements Plugin<Project> { | ||||
| 	static String MAVEN_BOM_TASK_NAME = "mavenBom" | ||||
| 
 | ||||
| 	public void apply(Project project) { | ||||
| 		project.configurations { | ||||
| 			archives | ||||
| 		} | ||||
| 		project.plugins.apply('io.spring.convention.artifactory') | ||||
| 		project.plugins.apply('io.spring.convention.maven') | ||||
| 		project.plugins.apply(MavenPlugin) | ||||
| 		project.plugins.apply(SigningPlugin) | ||||
| 		project.plugins.apply("io.spring.convention.ossrh") | ||||
| 
 | ||||
| 		project.group = project.rootProject.group | ||||
| 		project.task(MAVEN_BOM_TASK_NAME, type: MavenBomTask, group: 'Generate', description: 'Configures the pom as a Maven Build of Materials (BOM)') | ||||
| 		project.install.dependsOn project.mavenBom | ||||
| 		project.tasks.uploadArchives.dependsOn project.mavenBom | ||||
| 		project.tasks.artifactoryPublish.dependsOn project.mavenBom | ||||
| 
 | ||||
| 		project.plugins.withType(SonarQubePlugin) { | ||||
| 			project.sonarqube.skipProject = true | ||||
| 		} | ||||
| 
 | ||||
| 		project.rootProject.allprojects.each { p -> | ||||
| 			p.plugins.withType(io.spring.gradle.convention.SpringMavenPlugin) { | ||||
| 				if (!project.name.equals(p.name)) { | ||||
| 					project.mavenBom.projects.add(p) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		def deployArtifacts = project.task("deployArtifacts") | ||||
| 		deployArtifacts.group = 'Deploy tasks' | ||||
| 		deployArtifacts.description = "Deploys the artifacts to either Artifactor or Maven Central" | ||||
| 		if(Utils.isRelease(project)) { | ||||
| 			deployArtifacts.dependsOn project.tasks.uploadArchives | ||||
| 		} else { | ||||
| 			deployArtifacts.dependsOn project.tasks.artifactoryPublish | ||||
| 		} | ||||
| 
 | ||||
| 		project.artifacts { | ||||
| 			archives project.mavenBom.bomFile | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,87 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.DefaultTask | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.tasks.Input | ||||
| import org.gradle.api.tasks.Internal | ||||
| import org.gradle.api.tasks.OutputFile | ||||
| import org.gradle.api.tasks.TaskAction | ||||
| 
 | ||||
| public class MavenBomTask extends DefaultTask { | ||||
| 
 | ||||
| 	@Internal | ||||
| 	Set<Project> projects = [] | ||||
| 
 | ||||
| 	@OutputFile | ||||
| 	File bomFile | ||||
| 
 | ||||
| 	@Input | ||||
| 	Set<String> getProjectNames() { | ||||
| 		return projects*.name as Set | ||||
| 	} | ||||
| 
 | ||||
| 	public MavenBomTask() { | ||||
| 		this.group = "Generate" | ||||
| 		this.description = "Generates a Maven Build of Materials (BOM). See https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies" | ||||
| 		this.projects = project.subprojects | ||||
| 		this.bomFile = project.file("${->project.buildDir}/maven-bom/${->project.name}-${->project.version}.txt") | ||||
| 		this.outputs.upToDateWhen { false } | ||||
| 	} | ||||
| 
 | ||||
| 	@TaskAction | ||||
| 	public void configureBom() { | ||||
| //		project.configurations.archives.artifacts.clear() | ||||
| 		bomFile.parentFile.mkdirs() | ||||
| 		bomFile.write("Maven Build of Materials (BOM). See https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies") | ||||
| 		project.artifacts { | ||||
| 			// work around GRADLE-2406 by attaching text artifact | ||||
| 			archives(bomFile) | ||||
| 		} | ||||
| 		project.install { | ||||
| 			repositories.mavenInstaller { | ||||
| 				pom.whenConfigured { | ||||
| 					packaging = "pom" | ||||
| 					withXml { | ||||
| 						asNode().children().last() + { | ||||
| 							delegate.dependencyManagement { | ||||
| 								delegate.dependencies { | ||||
| 									projects.sort { dep -> "$dep.group:$dep.name" }.each { p -> | ||||
| 
 | ||||
| 										delegate.dependency { | ||||
| 											delegate.groupId(p.group) | ||||
| 											delegate.artifactId(p.name) | ||||
| 											delegate.version(p.version) | ||||
| 										} | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		project.uploadArchives { | ||||
| 			repositories.mavenDeployer { | ||||
| 				pom.whenConfigured { | ||||
| 					packaging = "pom" | ||||
| 					withXml { | ||||
| 						asNode().children().last() + { | ||||
| 							delegate.dependencyManagement { | ||||
| 								delegate.dependencies { | ||||
| 									projects.sort { dep -> "$dep.group:$dep.name" }.each { p -> | ||||
| 
 | ||||
| 										delegate.dependency { | ||||
| 											delegate.groupId(p.group) | ||||
| 											delegate.artifactId(p.name) | ||||
| 											delegate.version(p.version) | ||||
| 										} | ||||
| 									} | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,182 @@ | |||
| /* | ||||
|  * Copyright 2002-2015 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  *      https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.* | ||||
| import org.gradle.api.artifacts.Configuration | ||||
| import org.gradle.api.artifacts.ProjectDependency; | ||||
| import org.gradle.api.artifacts.maven.Conf2ScopeMapping | ||||
| import org.gradle.api.plugins.MavenPlugin | ||||
| import org.gradle.plugins.ide.eclipse.EclipsePlugin | ||||
| import org.gradle.plugins.ide.idea.IdeaPlugin | ||||
| import org.gradle.api.invocation.* | ||||
| 
 | ||||
| /** | ||||
|  * Gradle plugin that allows projects to merged together. Primarily developed to | ||||
|  * allow Spring to support multiple incompatible versions of third-party | ||||
|  * dependencies (for example Hibernate v3 and v4). | ||||
|  * <p> | ||||
|  * The 'merge' extension should be used to define how projects are merged, for example: | ||||
|  * <pre class="code"> | ||||
|  * configure(subprojects) { | ||||
|  *     apply plugin: MergePlugin | ||||
|  * } | ||||
|  * | ||||
|  * project("myproject") { | ||||
|  * } | ||||
|  * | ||||
|  * project("myproject-extra") { | ||||
|  *     merge.into = project("myproject") | ||||
|  * } | ||||
|  * </pre> | ||||
|  * <p> | ||||
|  * This plugin adds two new configurations: | ||||
|  * <ul> | ||||
|  * <li>merging - Contains the projects being merged into this project<li> | ||||
|  * <li>runtimeMerge - Contains all dependencies that are merge projects. These are used | ||||
|  * to allow an IDE to reference merge projects.</li> | ||||
|  * <ul> | ||||
|  * | ||||
|  * @author Rob Winch | ||||
|  * @author Phillip Webb | ||||
|  */ | ||||
| class MergePlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	private static boolean attachedProjectsEvaluated; | ||||
| 
 | ||||
| 	public void apply(Project project) { | ||||
| 		project.plugins.apply(MavenPlugin) | ||||
| 		project.plugins.apply(EclipsePlugin) | ||||
| 		project.plugins.apply(IdeaPlugin) | ||||
| 
 | ||||
| 		MergeModel model = project.extensions.create("merge", MergeModel) | ||||
| 		model.project = project | ||||
| 		project.configurations.create("merging") | ||||
| 		Configuration runtimeMerge = project.configurations.create("runtimeMerge") | ||||
| 
 | ||||
| 		// Ensure the IDE can reference merged projects | ||||
| 		project.eclipse.classpath.plusConfigurations += [ runtimeMerge ] | ||||
| 		project.idea.module.scopes.PROVIDED.plus += [ runtimeMerge ] | ||||
| 
 | ||||
| 		// Hook to perform the actual merge logic | ||||
| 		project.afterEvaluate{ | ||||
| 			if (it.merge.into != null) { | ||||
| 				setup(it) | ||||
| 			} | ||||
| 			setupIdeDependencies(it) | ||||
| 		} | ||||
| 
 | ||||
| 		// Hook to build runtimeMerge dependencies | ||||
| 		if (!attachedProjectsEvaluated) { | ||||
| 			project.gradle.projectsEvaluated{ | ||||
| 				postProcessProjects(it) | ||||
| 			} | ||||
| 			attachedProjectsEvaluated  = true; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void setup(Project project) { | ||||
| 		project.merge.into.dependencies.add("merging", project) | ||||
| 		project.dependencies.add("provided", project.merge.into.sourceSets.main.output) | ||||
| 		project.dependencies.add("runtimeMerge", project.merge.into) | ||||
| 		setupTaskDependencies(project) | ||||
| 		setupMaven(project) | ||||
| 	} | ||||
| 
 | ||||
| 	private void setupTaskDependencies(Project project) { | ||||
| 		// invoking a task will invoke the task with the same name on 'into' project | ||||
| 		["sourcesJar", "jar", "javadocJar", "javadoc", "install", "artifactoryPublish", "signArchives", "uploadArchives"].each { | ||||
| 			def task = project.tasks.findByPath(it) | ||||
| 			if (task) { | ||||
| 				task.enabled = false | ||||
| 				task.dependsOn(project.merge.into.tasks.findByPath(it)) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// update 'into' project artifacts to contain the source artifact contents | ||||
| 		project.merge.into.sourcesJar.from(project.sourcesJar.source) | ||||
| 		project.merge.into.jar.from(project.sourceSets.main.output) | ||||
| 		project.merge.into.javadoc { | ||||
| 			source += project.javadoc.source | ||||
| 			classpath += project.javadoc.classpath | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void setupIdeDependencies(Project project) { | ||||
| 		project.configurations.each { c -> | ||||
| 			c.dependencies.findAll( { it instanceof org.gradle.api.artifacts.ProjectDependency } ).each { d -> | ||||
| 				if(d.dependencyProject.hasProperty("merge")) { | ||||
| 					d.dependencyProject.merge.from.each { from -> | ||||
| 						project.dependencies.add("runtimeMerge", from) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void setupMaven(Project project) { | ||||
| 		project.configurations.each { configuration -> | ||||
| 			Conf2ScopeMapping mapping = project.conf2ScopeMappings.getMapping([configuration]) | ||||
| 			if (mapping.scope) { | ||||
| 				Configuration intoConfiguration = project.merge.into.configurations.create( | ||||
| 					project.name + "-" + configuration.name) | ||||
| 				configuration.excludeRules.each { | ||||
| 					configuration.exclude([ | ||||
| 						(ExcludeRule.GROUP_KEY) : it.group, | ||||
| 						(ExcludeRule.MODULE_KEY) : it.module]) | ||||
| 				} | ||||
| 				configuration.dependencies.each { | ||||
| 					def intoCompile = project.merge.into.configurations.getByName("compile") | ||||
| 					// Protect against changing a compile scope dependency (SPR-10218) | ||||
| 					if (!intoCompile.dependencies.contains(it)) { | ||||
| 						intoConfiguration.dependencies.add(it) | ||||
| 					} | ||||
| 				} | ||||
| 				def index = project.parent.childProjects.findIndexOf {p -> p.getValue() == project} | ||||
| 				project.merge.into.install.repositories.mavenInstaller.pom.scopeMappings.addMapping( | ||||
| 					mapping.priority + 100 + index, intoConfiguration, mapping.scope) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private postProcessProjects(Gradle gradle) { | ||||
| 		gradle.allprojects(new Action<Project>() { | ||||
| 			public void execute(Project project) { | ||||
| 				if(!project.hasProperty("merge")) { | ||||
| 					return | ||||
| 				} | ||||
| 				project.configurations.getByName("runtime")?.allDependencies?.withType(ProjectDependency)?.each{ | ||||
| 					Configuration dependsOnMergedFrom = it.dependencyProject.configurations.getByName("merging"); | ||||
| 					dependsOnMergedFrom.dependencies.each{ dep -> | ||||
| 						project.dependencies.add("runtimeMerge", dep.dependencyProject) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| class MergeModel { | ||||
| 	Project project; | ||||
| 	Project into; | ||||
| 	List<Project> from = []; | ||||
| 
 | ||||
| 	public void setInto(Project into) { | ||||
| 		this.into = into; | ||||
| 		into.merge.from.add(project); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,26 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| public class OssrhPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		if(project.hasProperty('ossrhUsername')) { | ||||
| 			project.uploadArchives { | ||||
| 				repositories { | ||||
| 					mavenDeployer { | ||||
| 						repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { | ||||
| 							authentication(userName: project.ossrhUsername, password: project.ossrhPassword) | ||||
| 						} | ||||
| 
 | ||||
| 						snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") { | ||||
| 							authentication(userName: project.ossrhUsername, password: project.ossrhPassword) | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,80 @@ | |||
| /* | ||||
|  * Copyright 2016-2018 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| class RepositoryConventionPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	void apply(Project project) { | ||||
| 		String[] forceMavenRepositories = ((String) project.findProperty("forceMavenRepositories"))?.split(',') | ||||
| 		boolean isImplicitSnapshotRepository = forceMavenRepositories == null && Utils.isSnapshot(project) | ||||
| 		boolean isImplicitMilestoneRepository = forceMavenRepositories == null && Utils.isMilestone(project) | ||||
| 
 | ||||
| 		boolean isSnapshot = isImplicitSnapshotRepository || forceMavenRepositories?.contains('snapshot') | ||||
| 		boolean isMilestone = isImplicitMilestoneRepository || forceMavenRepositories?.contains('milestone') | ||||
| 
 | ||||
| 		project.repositories { | ||||
| 			if (forceMavenRepositories?.contains('local')) { | ||||
| 				mavenLocal() | ||||
| 			} | ||||
| 			mavenCentral() | ||||
| 			jcenter() { | ||||
| 				content { | ||||
| 					includeGroup "org.gretty" | ||||
| 				} | ||||
| 			} | ||||
| 			if (isSnapshot) { | ||||
| 				maven { | ||||
| 					name = 'artifactory-snapshot' | ||||
| 					if (project.hasProperty('artifactoryUsername')) { | ||||
| 						credentials { | ||||
| 							username project.artifactoryUsername | ||||
| 							password project.artifactoryPassword | ||||
| 						} | ||||
| 					} | ||||
| 					url = 'https://repo.spring.io/snapshot/' | ||||
| 				} | ||||
| 			} | ||||
| 			if (isSnapshot || isMilestone) { | ||||
| 				maven { | ||||
| 					name = 'artifactory-milestone' | ||||
| 					if (project.hasProperty('artifactoryUsername')) { | ||||
| 						credentials { | ||||
| 							username project.artifactoryUsername | ||||
| 							password project.artifactoryPassword | ||||
| 						} | ||||
| 					} | ||||
| 					url = 'https://repo.spring.io/milestone/' | ||||
| 				} | ||||
| 			} | ||||
| 			maven { | ||||
| 				name = 'artifactory-release' | ||||
| 				if (project.hasProperty('artifactoryUsername')) { | ||||
| 					credentials { | ||||
| 						username project.artifactoryUsername | ||||
| 						password project.artifactoryPassword | ||||
| 					} | ||||
| 				} | ||||
| 				url = 'https://repo.spring.io/release/' | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,78 @@ | |||
| /* | ||||
|  * Copyright 2016-2019 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.nohttp.gradle.NoHttpPlugin | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.plugins.BasePlugin | ||||
| import org.gradle.api.plugins.PluginManager | ||||
| 
 | ||||
| class RootProjectPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	void apply(Project project) { | ||||
| 		PluginManager pluginManager = project.getPluginManager() | ||||
| 		pluginManager.apply(BasePlugin) | ||||
| 		pluginManager.apply(SchemaPlugin) | ||||
| 		pluginManager.apply(NoHttpPlugin) | ||||
| 		pluginManager.apply("org.sonarqube") | ||||
| 
 | ||||
| 		project.repositories.mavenCentral() | ||||
| 
 | ||||
| 		project.allprojects { | ||||
| 			configurations.all { | ||||
| 				resolutionStrategy { | ||||
| 					cacheChangingModulesFor 0, "seconds" | ||||
| 					cacheDynamicVersionsFor 0, "seconds" | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		String projectName = Utils.getProjectName(project) | ||||
| 		project.sonarqube { | ||||
| 			properties { | ||||
| 				property "sonar.java.coveragePlugin", "jacoco" | ||||
| 				property "sonar.projectName", projectName | ||||
| 				property "sonar.jacoco.reportPath", "${project.buildDir.name}/jacoco.exec" | ||||
| 				property "sonar.links.homepage", "https://spring.io/${projectName}" | ||||
| 				property "sonar.links.ci", "https://jenkins.spring.io/job/${projectName}/" | ||||
| 				property "sonar.links.issue", "https://github.com/spring-projects/${projectName}/issues" | ||||
| 				property "sonar.links.scm", "https://github.com/spring-projects/${projectName}" | ||||
| 				property "sonar.links.scm_dev", "https://github.com/spring-projects/${projectName}.git" | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.tasks.create("dependencyManagementExport", DependencyManagementExportTask) | ||||
| 
 | ||||
| 		def finalizeDeployArtifacts = project.task("finalizeDeployArtifacts") | ||||
| 		if (Utils.isRelease(project) && project.hasProperty("ossrhUsername")) { | ||||
| 			project.ext.nexusUsername = project.ossrhUsername | ||||
| 			project.ext.nexusPassword = project.ossrhPassword | ||||
| 			project.getPluginManager().apply("io.codearte.nexus-staging") | ||||
| 			finalizeDeployArtifacts.dependsOn project.tasks.closeAndReleaseRepository | ||||
| 			project.nexusStaging { | ||||
| 				packageGroup = 'org.springframework' | ||||
| 
 | ||||
| 				// try for 5 minutes total | ||||
| 				numberOfRetries = 60 // default is 20 | ||||
| 				delayBetweenRetriesInMillis = 5000 // default is 2000 | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,71 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.api.tasks.bundling.Zip | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| public class SchemaDeployPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		project.getPluginManager().apply('org.hidetake.ssh') | ||||
| 
 | ||||
| 		project.ssh.settings { | ||||
| 			knownHosts = allowAnyHosts | ||||
| 		} | ||||
| 		project.remotes { | ||||
| 			docs { | ||||
| 				role 'docs' | ||||
| 				if (project.hasProperty('deployDocsHost')) { | ||||
| 					host = project.findProperty('deployDocsHost') | ||||
| 				} else { | ||||
| 					host = 'docs.af.pivotal.io' | ||||
| 				} | ||||
| 				retryCount = 5 // retry 5 times (default is 0) | ||||
| 				retryWaitSec = 10 // wait 10 seconds between retries (default is 0) | ||||
| 				user = project.findProperty('deployDocsSshUsername') | ||||
| 				if(project.hasProperty('deployDocsSshKeyPath')) { | ||||
| 					identity = project.file(project.findProperty('deployDocsSshKeyPath')) | ||||
| 				} else if (project.hasProperty('deployDocsSshKey')) { | ||||
| 					identity = project.findProperty('deployDocsSshKey') | ||||
| 				} | ||||
| 				if(project.hasProperty('deployDocsSshPassphrase')) { | ||||
| 					passphrase = project.findProperty('deployDocsSshPassphrase') | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.task('deploySchema') { | ||||
| 			dependsOn 'schemaZip' | ||||
| 			doFirst { | ||||
| 				project.ssh.run { | ||||
| 					session(project.remotes.docs) { | ||||
| 						def now = System.currentTimeMillis() | ||||
| 						def name = project.rootProject.name | ||||
| 						def version = project.rootProject.version | ||||
| 						def tempPath = "/tmp/${name}-${now}-schema/".replaceAll(' ', '_') | ||||
| 
 | ||||
| 						execute "mkdir -p $tempPath" | ||||
| 
 | ||||
| 						project.tasks.schemaZip.outputs.each { o -> | ||||
| 							println "Putting $o.files" | ||||
| 							put from: o.files, into: tempPath | ||||
| 						} | ||||
| 
 | ||||
| 						execute "unzip $tempPath*.zip -d $tempPath" | ||||
| 
 | ||||
| 						def extractPath = "/var/www/domains/spring.io/docs/htdocs/autorepo/schema/${name}/${version}/" | ||||
| 
 | ||||
| 						execute "rm -rf $extractPath" | ||||
| 						execute "mkdir -p $extractPath" | ||||
| 						execute "rm -f $tempPath*.zip" | ||||
| 						execute "rm -rf $extractPath*" | ||||
| 						execute "mv $tempPath/* $extractPath" | ||||
| 						execute "chmod -R g+w $extractPath" | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,15 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.api.tasks.bundling.Zip | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| public class SchemaPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		project.getPluginManager().apply(SchemaZipPlugin) | ||||
| 		project.getPluginManager().apply(SchemaDeployPlugin) | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,43 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.api.tasks.bundling.Zip | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| public class SchemaZipPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		Zip schemaZip = project.tasks.create('schemaZip', Zip) | ||||
| 		schemaZip.group = 'Distribution' | ||||
| 		schemaZip.baseName = project.rootProject.name | ||||
| 		schemaZip.classifier = 'schema' | ||||
| 		schemaZip.description = "Builds -${schemaZip.classifier} archive containing all " + | ||||
| 			"XSDs for deployment at static.springframework.org/schema." | ||||
| 
 | ||||
| 		project.rootProject.subprojects.each { module -> | ||||
| 
 | ||||
| 			module.getPlugins().withType(JavaPlugin.class).all { | ||||
| 				def Properties schemas = new Properties(); | ||||
| 
 | ||||
| 				module.sourceSets.main.resources.find { | ||||
| 					it.path.endsWith('META-INF/spring.schemas') | ||||
| 				}?.withInputStream { schemas.load(it) } | ||||
| 
 | ||||
| 				for (def key : schemas.keySet()) { | ||||
| 					def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1') | ||||
| 					assert shortName != key | ||||
| 					File xsdFile = module.sourceSets.main.resources.find { | ||||
| 						it.path.endsWith(schemas.get(key)) | ||||
| 					} | ||||
| 					assert xsdFile != null | ||||
| 					schemaZip.into (shortName) { | ||||
| 						duplicatesStrategy 'exclude' | ||||
| 						from xsdFile.path | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,52 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  *      https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.Comparator; | ||||
| import java.util.Enumeration; | ||||
| import java.util.List; | ||||
| import java.util.Properties; | ||||
| 
 | ||||
| /** | ||||
|  * A Properties which sorts they keys so that they can be written to a File with | ||||
|  * the keys sorted. | ||||
|  * | ||||
|  * @author Rob Winch | ||||
|  * | ||||
|  */ | ||||
| class SortedProperties extends Properties { | ||||
| 	private static final long serialVersionUID = -6199017589626540836L; | ||||
| 
 | ||||
| 	public Enumeration<Object> keys() { | ||||
| 		Enumeration<Object> keysEnum = super.keys(); | ||||
| 		List<Object> keyList = new ArrayList<Object>(); | ||||
| 
 | ||||
| 		while (keysEnum.hasMoreElements()) { | ||||
| 			keyList.add(keysEnum.nextElement()); | ||||
| 		} | ||||
| 
 | ||||
| 		Collections.sort(keyList, new Comparator<Object>() { | ||||
| 			@Override | ||||
| 			public int compare(Object o1, Object o2) { | ||||
| 				return o1.toString().compareTo(o2.toString()); | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
| 		return Collections.enumeration(keyList); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,54 @@ | |||
| /* | ||||
|  * Copyright 2016-2019 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.dependencymanagement.DependencyManagementPlugin | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| 
 | ||||
| /** | ||||
|  * Adds and configures {@link DependencyManagementPlugin}. | ||||
|  * <p> | ||||
|  * Additionally, if 'gradle/dependency-management.gradle' file is present it will be | ||||
|  * automatically applied file for configuring the dependencies. | ||||
|  */ | ||||
| class SpringDependencyManagementConventionPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	static final String DEPENDENCY_MANAGEMENT_RESOURCE = "gradle/dependency-management.gradle" | ||||
| 
 | ||||
| 	@Override | ||||
| 	void apply(Project project) { | ||||
| 		project.getPluginManager().apply(ManagementConfigurationPlugin) | ||||
| 		project.getPluginManager().apply(DependencyManagementPlugin) | ||||
| 		project.dependencyManagement { | ||||
| 			resolutionStrategy { | ||||
| 				cacheChangingModulesFor 0, "seconds" | ||||
| 			} | ||||
| 		} | ||||
| 		File rootDir = project.rootDir | ||||
| 		List<File> dependencyManagementFiles = [project.rootProject.file(DEPENDENCY_MANAGEMENT_RESOURCE)] | ||||
| 		for (File dir = project.projectDir; dir != rootDir; dir = dir.parentFile) { | ||||
| 			dependencyManagementFiles.add(new File(dir, DEPENDENCY_MANAGEMENT_RESOURCE)) | ||||
| 		} | ||||
| 		dependencyManagementFiles.each { f -> | ||||
| 			if (f.exists()) { | ||||
| 				project.apply from: f.absolutePath | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,221 @@ | |||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.dependencymanagement.DependencyManagementPlugin | ||||
| import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension | ||||
| import io.spring.gradle.dependencymanagement.dsl.GeneratedPomCustomizationHandler | ||||
| import org.gradle.api.Action | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.XmlProvider | ||||
| import org.gradle.api.artifacts.component.ModuleComponentSelector | ||||
| import org.gradle.api.artifacts.maven.MavenDeployment | ||||
| import org.gradle.api.artifacts.maven.MavenPom | ||||
| import org.gradle.api.artifacts.result.ResolvedDependencyResult | ||||
| import org.gradle.api.plugins.JavaBasePlugin | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.api.plugins.JavaPluginConvention | ||||
| import org.gradle.api.plugins.MavenPlugin | ||||
| import org.gradle.api.tasks.SourceSet | ||||
| import org.gradle.api.tasks.bundling.Jar | ||||
| import org.gradle.api.tasks.javadoc.Javadoc | ||||
| import org.gradle.plugins.signing.SigningPlugin | ||||
| import org.slf4j.Logger | ||||
| import org.slf4j.LoggerFactory | ||||
| 
 | ||||
| public class SpringMavenPlugin implements Plugin<Project> { | ||||
| 	private static final String ARCHIVES = "archives"; | ||||
| 	Logger logger = LoggerFactory.getLogger(getClass()); | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		project.getPluginManager().apply(JavaPlugin.class); | ||||
| 		project.getPluginManager().apply(MavenPlugin.class); | ||||
| 		project.getPluginManager().apply(SigningPlugin.class); | ||||
| 
 | ||||
| 		Javadoc javadoc = (Javadoc) project.getTasks().findByPath("javadoc"); | ||||
| 		Jar javadocJar = project.getTasks().create("javadocJar", Jar.class); | ||||
| 		javadocJar.setClassifier("javadoc"); | ||||
| 		javadocJar.from(javadoc); | ||||
| 
 | ||||
| 		JavaPluginConvention java = project.getConvention().getPlugin(JavaPluginConvention.class); | ||||
| 		SourceSet mainSourceSet = java.getSourceSets().getByName("main"); | ||||
| 		Jar sourcesJar = project.getTasks().create("sourcesJar", Jar.class); | ||||
| 		sourcesJar.setClassifier("sources"); | ||||
| 		sourcesJar.from(mainSourceSet.getAllSource()); | ||||
| 
 | ||||
| 		project.getArtifacts().add(ARCHIVES, javadocJar); | ||||
| 		project.getArtifacts().add(ARCHIVES, sourcesJar); | ||||
| 
 | ||||
| 		project.install { | ||||
| 			repositories.mavenInstaller { | ||||
| 				configurePom(project, pom) | ||||
| 			} | ||||
| 		} | ||||
| 		project.uploadArchives { | ||||
| 			repositories.mavenDeployer { | ||||
| 				configurePom(project, pom) | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.plugins.withType(DependencyManagementPlugin) { | ||||
| 			inlineDependencyManagement(project); | ||||
| 		} | ||||
| 
 | ||||
| 		def hasSigningKey = project.hasProperty("signing.keyId") || project.findProperty("signingKey") | ||||
| 		if(hasSigningKey && Utils.isRelease(project)) { | ||||
| 			sign(project) | ||||
| 		} | ||||
| 
 | ||||
| 		project.getPluginManager().apply("io.spring.convention.ossrh"); | ||||
| 	} | ||||
| 
 | ||||
| 	private void inlineDependencyManagement(Project project) { | ||||
| 		final DependencyManagementExtension dependencyManagement = project.getExtensions().findByType(DependencyManagementExtension.class); | ||||
| 		dependencyManagement.generatedPomCustomization( { handler -> handler.setEnabled(false) }); | ||||
| 
 | ||||
| 		project.install { | ||||
| 			repositories.mavenInstaller { | ||||
| 				configurePomForInlineDependencies(project, pom) | ||||
| 			} | ||||
| 		} | ||||
| 		project.uploadArchives { | ||||
| 			repositories.mavenDeployer { | ||||
| 				configurePomForInlineDependencies(project, pom) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void configurePomForInlineDependencies(Project project, MavenPom pom) { | ||||
| 		pom.withXml { XmlProvider xml -> | ||||
| 			project.plugins.withType(JavaBasePlugin) { | ||||
| 				def dependencies = xml.asNode()?.dependencies?.dependency | ||||
| 				def configuredDependencies = project.configurations.findAll{ it.canBeResolved }*.incoming*.resolutionResult*.allDependencies.flatten() | ||||
| 				dependencies?.each { Node dep -> | ||||
| 					def group = dep.groupId.text() | ||||
| 					def name = dep.artifactId.text() | ||||
| 
 | ||||
| 					ResolvedDependencyResult resolved = configuredDependencies.find { r -> | ||||
| 						(r.requested instanceof ModuleComponentSelector) && | ||||
| 								(r.requested.group == group) && | ||||
| 								(r.requested.module == name) | ||||
| 					} | ||||
| 
 | ||||
| 					if (!resolved) { | ||||
| 						return | ||||
| 					} | ||||
| 
 | ||||
| 					def versionNode = dep.version | ||||
| 					if (!versionNode) { | ||||
| 						dep.appendNode('version') | ||||
| 					} | ||||
| 					def moduleVersion = resolved.selected.moduleVersion | ||||
| 					dep.groupId[0].value = moduleVersion.group | ||||
| 					dep.artifactId[0].value = moduleVersion.name | ||||
| 					dep.version[0].value = moduleVersion.version | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void sign(Project project) { | ||||
| 		project.install { | ||||
| 			repositories { | ||||
| 				mavenDeployer { | ||||
| 					beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) } | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.uploadArchives { | ||||
| 			repositories { | ||||
| 				mavenDeployer { | ||||
| 					beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) } | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		project.signing { | ||||
| 			required { project.gradle.taskGraph.hasTask("uploadArchives") } | ||||
| 			def signingKeyId = project.findProperty("signingKeyId") | ||||
| 			def signingKey = project.findProperty("signingKey") | ||||
| 			def signingPassword = project.findProperty("signingPassword") | ||||
| 			if (signingKeyId) { | ||||
| 				useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) | ||||
| 			} else if (signingKey) { | ||||
| 				useInMemoryPgpKeys(signingKey, signingPassword) | ||||
| 			} | ||||
| 			sign project.configurations.archives | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private static void configurePom(Project project, MavenPom pom) { | ||||
| 		pom.whenConfigured { p -> | ||||
| 			p.dependencies = p.dependencies.sort { dep -> | ||||
| 				"$dep.scope:$dep.optional:$dep.groupId:$dep.artifactId" | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		pom.project { | ||||
| 			boolean isWar = project.hasProperty("war"); | ||||
| 			String projectVersion = String.valueOf(project.getVersion()); | ||||
| 			String projectName = Utils.getProjectName(project); | ||||
| 
 | ||||
| 			if(isWar) { | ||||
| 				packaging = "war" | ||||
| 			} | ||||
| 			name = project.name | ||||
| 			description = project.name | ||||
| 			url = 'https://spring.io/spring-security' | ||||
| 			organization { | ||||
| 				name = 'spring.io' | ||||
| 				url = 'https://spring.io/' | ||||
| 			} | ||||
| 			licenses { | ||||
| 				license { | ||||
| 					name 'The Apache Software License, Version 2.0' | ||||
| 					url 'https://www.apache.org/licenses/LICENSE-2.0.txt' | ||||
| 					distribution 'repo' | ||||
| 					} | ||||
| 				} | ||||
| 			scm { | ||||
| 				url = 'https://github.com/spring-projects/spring-security' | ||||
| 				connection = 'scm:git:git://github.com/spring-projects/spring-security' | ||||
| 				developerConnection = 'scm:git:git://github.com/spring-projects/spring-security' | ||||
| 			} | ||||
| 			developers { | ||||
| 				developer { | ||||
| 					id = 'rwinch' | ||||
| 					name = 'Rob Winch' | ||||
| 					email = 'rwinch@pivotal.io' | ||||
| 				} | ||||
| 				developer { | ||||
| 					id = 'jgrandja' | ||||
| 					name = 'Joe Grandja' | ||||
| 					email = 'jgrandja@pivotal.io' | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			if(isWar) { | ||||
| 				properties { | ||||
| 					'm2eclipse.wtp.contextRoot' '/' | ||||
| 				} | ||||
| 			} | ||||
| 			if (Utils.isSnapshot(project)) { | ||||
| 				repositories { | ||||
| 					repository { | ||||
| 						id 'spring-snapshot' | ||||
| 						url 'https://repo.spring.io/snapshot' | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			else if (Utils.isMilestone(project)) { | ||||
| 				repositories { | ||||
| 					repository { | ||||
| 						id 'spring-milestone' | ||||
| 						url 'https://repo.spring.io/milestone' | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,50 @@ | |||
| /* | ||||
|  * Copyright 2016-2019 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.plugins.JavaLibraryPlugin; | ||||
| import org.gradle.api.plugins.MavenPlugin; | ||||
| import org.gradle.api.plugins.PluginManager; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| class SpringModulePlugin extends AbstractSpringJavaPlugin { | ||||
| 
 | ||||
| 	@Override | ||||
| 	void additionalPlugins(Project project) { | ||||
| 		PluginManager pluginManager = project.getPluginManager(); | ||||
| 		pluginManager.apply(JavaLibraryPlugin.class) | ||||
| 		pluginManager.apply(MavenPlugin.class); | ||||
| 		pluginManager.apply("io.spring.convention.maven"); | ||||
| 		pluginManager.apply("io.spring.convention.artifactory"); | ||||
| 		pluginManager.apply("io.spring.convention.jacoco"); | ||||
| 		pluginManager.apply("io.spring.convention.merge"); | ||||
| 
 | ||||
| 		def deployArtifacts = project.task("deployArtifacts") | ||||
| 		deployArtifacts.group = 'Deploy tasks' | ||||
| 		deployArtifacts.description = "Deploys the artifacts to either Artifactory or Maven Central" | ||||
| 		if (Utils.isRelease(project)) { | ||||
| 			deployArtifacts.dependsOn project.tasks.uploadArchives | ||||
| 		} | ||||
| 		else { | ||||
| 			deployArtifacts.dependsOn project.tasks.artifactoryPublish | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,24 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class SpringPomPlugin extends SpringModulePlugin { | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,43 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.plugins.PluginManager; | ||||
| import org.gradle.api.plugins.WarPlugin | ||||
| import org.gradle.api.plugins.JavaPlugin; | ||||
| import org.gradle.api.tasks.testing.Test | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class SpringSampleBootPlugin extends SpringSamplePlugin { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void additionalPlugins(Project project) { | ||||
| 		super.additionalPlugins(project); | ||||
| 
 | ||||
| 		PluginManager pluginManager = project.getPluginManager(); | ||||
| 
 | ||||
| 		pluginManager.apply("org.springframework.boot"); | ||||
| 
 | ||||
| 		project.repositories { | ||||
| 			maven { url 'https://repo.spring.io/snapshot' } | ||||
| 			maven { url 'https://repo.spring.io/milestone' } | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,33 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Project | ||||
| import org.sonarqube.gradle.SonarQubePlugin; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class SpringSamplePlugin extends AbstractSpringJavaPlugin { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void additionalPlugins(Project project) { | ||||
| 		project.plugins.withType(SonarQubePlugin) { | ||||
| 			project.sonarqube.skipProject = true | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,97 @@ | |||
| /* | ||||
|  * Copyright 2016-2018 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.Task | ||||
| import org.gradle.api.plugins.PluginManager | ||||
| import org.gradle.api.tasks.testing.Test | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class SpringSampleWarPlugin extends SpringSamplePlugin { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void additionalPlugins(Project project) { | ||||
| 		super.additionalPlugins(project); | ||||
| 
 | ||||
| 		PluginManager pluginManager = project.getPluginManager(); | ||||
| 
 | ||||
| 		pluginManager.apply("war"); | ||||
| 		pluginManager.apply("org.gretty"); | ||||
| 
 | ||||
| 		project.gretty { | ||||
| 			servletContainer = 'tomcat85' | ||||
| 			contextPath = '/' | ||||
| 			fileLogEnabled = false | ||||
| 		} | ||||
| 
 | ||||
| 		Task prepareAppServerForIntegrationTests = project.tasks.create('prepareAppServerForIntegrationTests') { | ||||
| 			group = 'Verification' | ||||
| 			description = 'Prepares the app server for integration tests' | ||||
| 			doFirst { | ||||
| 				project.gretty { | ||||
| 					httpPort = getRandomFreePort() | ||||
| 					httpsPort = getRandomPort() | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		project.tasks.withType(org.akhikhl.gretty.AppBeforeIntegrationTestTask).all { task -> | ||||
| 			task.dependsOn prepareAppServerForIntegrationTests | ||||
| 		} | ||||
| 
 | ||||
| 		project.tasks.withType(Test).all { task -> | ||||
| 			if("integrationTest".equals(task.name)) { | ||||
| 				applyForIntegrationTest(project, task) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	def applyForIntegrationTest(Project project, Task integrationTest) { | ||||
| 		project.gretty.integrationTestTask = integrationTest.name | ||||
| 
 | ||||
| 		integrationTest.doFirst { | ||||
| 			def gretty = project.gretty | ||||
| 			String host = project.gretty.host ?: 'localhost' | ||||
| 			boolean isHttps = gretty.httpsEnabled | ||||
| 			Integer httpPort = integrationTest.systemProperties['gretty.httpPort'] | ||||
| 			Integer httpsPort = integrationTest.systemProperties['gretty.httpsPort'] | ||||
| 			int port = isHttps ? httpsPort : httpPort | ||||
| 			String contextPath = project.gretty.contextPath | ||||
| 			String httpBaseUrl = "http://${host}:${httpPort}${contextPath}" | ||||
| 			String httpsBaseUrl = "https://${host}:${httpsPort}${contextPath}" | ||||
| 			String baseUrl = isHttps ? httpsBaseUrl : httpBaseUrl | ||||
| 			integrationTest.systemProperty 'app.port', port | ||||
| 			integrationTest.systemProperty 'app.httpPort', httpPort | ||||
| 			integrationTest.systemProperty 'app.httpsPort', httpsPort | ||||
| 			integrationTest.systemProperty 'app.baseURI', baseUrl | ||||
| 			integrationTest.systemProperty 'app.httpBaseURI', httpBaseUrl | ||||
| 			integrationTest.systemProperty 'app.httpsBaseURI', httpsBaseUrl | ||||
| 
 | ||||
| 			integrationTest.systemProperty 'geb.build.baseUrl', baseUrl | ||||
| 			integrationTest.systemProperty 'geb.build.reportsDir', 'build/geb-reports' | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	def getRandomPort() { | ||||
| 		ServerSocket ss = new ServerSocket(0) | ||||
| 		int port = ss.localPort | ||||
| 		ss.close() | ||||
| 		return port | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,30 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Project; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class SpringTestPlugin extends AbstractSpringJavaPlugin { | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void additionalPlugins(Project project) { | ||||
| 		project.sonarqube.skipProject = true | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,54 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Plugin | ||||
| import org.gradle.api.Project | ||||
| import org.gradle.api.plugins.JavaPlugin | ||||
| import org.gradle.jvm.tasks.Jar | ||||
| 
 | ||||
| /** | ||||
|  * Adds the ability to depends on the test jar within other projects using: | ||||
|  * | ||||
|  * <code> | ||||
|  * testCompile project(path: ':foo', configuration: 'tests') | ||||
|  * </code> | ||||
|  * | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class TestsConfigurationPlugin implements Plugin<Project> { | ||||
| 	@Override | ||||
| 	public void apply(Project project) { | ||||
| 		project.plugins.withType(JavaPlugin) { | ||||
| 			applyJavaProject(project) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void applyJavaProject(Project project) { | ||||
| 		project.configurations { | ||||
| 			tests.extendsFrom testRuntime | ||||
| 		} | ||||
| 
 | ||||
| 		project.tasks.create('testJar', Jar) { | ||||
| 			classifier = 'test' | ||||
| 			from project.sourceSets.test.output | ||||
| 		} | ||||
| 
 | ||||
| 		project.artifacts { | ||||
| 			tests project.testJar | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,34 @@ | |||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Project; | ||||
| 
 | ||||
| public class Utils { | ||||
| 
 | ||||
| 	static String getProjectName(Project project) { | ||||
| 		String projectName = project.getRootProject().getName(); | ||||
| 		if(projectName.endsWith("-build")) { | ||||
| 			projectName = projectName.substring(0, projectName.length() - "-build".length()); | ||||
| 		} | ||||
| 		return projectName; | ||||
| 	} | ||||
| 
 | ||||
| 	static boolean isSnapshot(Project project) { | ||||
| 		String projectVersion = projectVersion(project) | ||||
| 		return projectVersion.matches('^.*([.-]BUILD)?-SNAPSHOT$') | ||||
| 	} | ||||
| 
 | ||||
| 	static boolean isMilestone(Project project) { | ||||
| 		String projectVersion = projectVersion(project) | ||||
| 		return projectVersion.matches('^.*[.-]M\\d+$') || projectVersion.matches('^.*[.-]RC\\d+$') | ||||
| 	} | ||||
| 
 | ||||
| 	static boolean isRelease(Project project) { | ||||
| 		return !(isSnapshot(project) || isMilestone(project)) | ||||
| 	} | ||||
| 
 | ||||
| 	private static String projectVersion(Project project) { | ||||
| 		return String.valueOf(project.getVersion()); | ||||
| 	} | ||||
| 
 | ||||
| 	private Utils() {} | ||||
| } | ||||
|  | @ -0,0 +1,208 @@ | |||
| /* | ||||
|  * Copyright 2019-2020 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  *      https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.asciidoctor.gradle.base.AsciidoctorAttributeProvider; | ||||
| import org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask; | ||||
| import org.asciidoctor.gradle.jvm.AsciidoctorJExtension; | ||||
| import org.asciidoctor.gradle.jvm.AsciidoctorJPlugin; | ||||
| import org.asciidoctor.gradle.jvm.AsciidoctorTask; | ||||
| import org.gradle.api.Action; | ||||
| import org.gradle.api.Plugin; | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.artifacts.Configuration; | ||||
| import org.gradle.api.artifacts.DependencySet; | ||||
| import org.gradle.api.artifacts.dsl.RepositoryHandler; | ||||
| import org.gradle.api.file.CopySpec; | ||||
| import org.gradle.api.file.FileTree; | ||||
| import org.gradle.api.tasks.Sync; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.net.URI; | ||||
| import java.time.LocalDate; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.concurrent.Callable; | ||||
| import java.util.function.Consumer; | ||||
| 
 | ||||
| /** | ||||
|  * Conventions that are applied in the presence of the {@link AsciidoctorJPlugin}. When | ||||
|  * the plugin is applied: | ||||
|  * | ||||
|  * <ul> | ||||
|  * <li>All warnings are made fatal. | ||||
|  * <li>A task is created to resolve and unzip our documentation resources (CSS and | ||||
|  * Javascript). | ||||
|  * <li>For each {@link AsciidoctorTask} (HTML only): | ||||
|  * <ul> | ||||
|  * <li>A configuration named asciidoctorExtensions is ued to add the | ||||
|  * <a href="https://github.com/spring-io/spring-asciidoctor-extensions#block-switch">block | ||||
|  * switch</a> extension | ||||
|  * <li>{@code doctype} {@link AsciidoctorTask#options(Map) option} is configured. | ||||
|  * <li>{@link AsciidoctorTask#attributes(Map) Attributes} are configured for syntax | ||||
|  * highlighting, CSS styling, docinfo, etc. | ||||
|  * </ul> | ||||
|  * <li>For each {@link AbstractAsciidoctorTask} (HTML and PDF): | ||||
|  * <ul> | ||||
|  * <li>{@link AsciidoctorTask#attributes(Map) Attributes} are configured to enable | ||||
|  * warnings for references to missing attributes, the year is added as @{code today-year}, | ||||
|  * etc | ||||
|  * <li>{@link AbstractAsciidoctorTask#baseDirFollowsSourceDir() baseDirFollowsSourceDir()} | ||||
|  * is enabled. | ||||
|  * </ul> | ||||
|  * </ul> | ||||
|  * | ||||
|  * @author Andy Wilkinson | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class AsciidoctorConventionPlugin implements Plugin<Project> { | ||||
| 
 | ||||
| 	public void apply(Project project) { | ||||
| 		project.getPlugins().withType(AsciidoctorJPlugin.class, (asciidoctorPlugin) -> { | ||||
| 			createDefaultAsciidoctorRepository(project); | ||||
| 			makeAllWarningsFatal(project); | ||||
| 			Sync unzipResources = createUnzipDocumentationResourcesTask(project); | ||||
| 			project.getTasks().withType(AbstractAsciidoctorTask.class, (asciidoctorTask) -> { | ||||
| 				asciidoctorTask.dependsOn(unzipResources); | ||||
| 				configureExtensions(project, asciidoctorTask); | ||||
| 				configureCommonAttributes(project, asciidoctorTask); | ||||
| 				configureOptions(asciidoctorTask); | ||||
| 				asciidoctorTask.baseDirFollowsSourceDir(); | ||||
| 				asciidoctorTask.useIntermediateWorkDir(); | ||||
| 				asciidoctorTask.resources(new Action<CopySpec>() { | ||||
| 					@Override | ||||
| 					public void execute(CopySpec resourcesSpec) { | ||||
| 						resourcesSpec.from(unzipResources); | ||||
| 						resourcesSpec.from(asciidoctorTask.getSourceDir(), new Action<CopySpec>() { | ||||
| 							@Override | ||||
| 							public void execute(CopySpec resourcesSrcDirSpec) { | ||||
| 								// https://github.com/asciidoctor/asciidoctor-gradle-plugin/issues/523 | ||||
| 								// For now copy the entire sourceDir over so that include files are | ||||
| 								// available in the intermediateWorkDir | ||||
| 								// resourcesSrcDirSpec.include("images/**"); | ||||
| 							} | ||||
| 						}); | ||||
| 					} | ||||
| 				}); | ||||
| 				if (asciidoctorTask instanceof AsciidoctorTask) { | ||||
| 					configureHtmlOnlyAttributes(project, asciidoctorTask); | ||||
| 				} | ||||
| 			}); | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	private void createDefaultAsciidoctorRepository(Project project) { | ||||
| 		project.getGradle().afterProject(new Action<Project>() { | ||||
| 			@Override | ||||
| 			public void execute(Project project) { | ||||
| 				RepositoryHandler repositories = project.getRepositories(); | ||||
| 				if (repositories.isEmpty()) { | ||||
| 					repositories.mavenCentral(); | ||||
| 					repositories.maven(repo -> { | ||||
| 						repo.setUrl(URI.create("https://repo.spring.io/release")); | ||||
| 					}); | ||||
| 				} | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	private void makeAllWarningsFatal(Project project) { | ||||
| 		project.getExtensions().getByType(AsciidoctorJExtension.class).fatalWarnings(".*"); | ||||
| 	} | ||||
| 
 | ||||
| 	private void configureExtensions(Project project, AbstractAsciidoctorTask asciidoctorTask) { | ||||
| 		Configuration extensionsConfiguration = project.getConfigurations().maybeCreate("asciidoctorExtensions"); | ||||
| 		extensionsConfiguration.defaultDependencies(new Action<DependencySet>() { | ||||
| 			@Override | ||||
| 			public void execute(DependencySet dependencies) { | ||||
| 				dependencies.add(project.getDependencies().create("io.spring.asciidoctor:spring-asciidoctor-extensions-block-switch:0.4.2.RELEASE")); | ||||
| 			} | ||||
| 		}); | ||||
| 		asciidoctorTask.configurations(extensionsConfiguration); | ||||
| 	} | ||||
| 
 | ||||
| 	private Sync createUnzipDocumentationResourcesTask(Project project) { | ||||
| 		Configuration documentationResources = project.getConfigurations().maybeCreate("documentationResources"); | ||||
| 		documentationResources.getDependencies() | ||||
| 				.add(project.getDependencies().create("io.spring.docresources:spring-doc-resources:0.2.1.RELEASE")); | ||||
| 		Sync unzipResources = project.getTasks().create("unzipDocumentationResources", | ||||
| 				Sync.class, new Action<Sync>() { | ||||
| 					@Override | ||||
| 			public void execute(Sync sync) { | ||||
| 				sync.dependsOn(documentationResources); | ||||
| 				sync.from(new Callable<List<FileTree>>() { | ||||
| 					@Override | ||||
| 					public List<FileTree> call() throws Exception { | ||||
| 						List<FileTree> result = new ArrayList<>(); | ||||
| 						documentationResources.getAsFileTree().forEach(new Consumer<File>() { | ||||
| 							@Override | ||||
| 							public void accept(File file) { | ||||
| 								result.add(project.zipTree(file)); | ||||
| 							} | ||||
| 						}); | ||||
| 						return result; | ||||
| 					} | ||||
| 				}); | ||||
| 				File destination = new File(project.getBuildDir(), "docs/resources"); | ||||
| 				sync.into(project.relativePath(destination)); | ||||
| 			} | ||||
| 		}); | ||||
| 		return unzipResources; | ||||
| 	} | ||||
| 
 | ||||
| 	private void configureOptions(AbstractAsciidoctorTask asciidoctorTask) { | ||||
| 		asciidoctorTask.options(Collections.singletonMap("doctype", "book")); | ||||
| 	} | ||||
| 
 | ||||
| 	private void configureHtmlOnlyAttributes(Project project, AbstractAsciidoctorTask asciidoctorTask) { | ||||
| 		Map<String, Object> attributes = new HashMap<>(); | ||||
| 		attributes.put("source-highlighter", "highlight.js"); | ||||
| 		attributes.put("highlightjsdir", "js/highlight"); | ||||
| 		attributes.put("highlightjs-theme", "github"); | ||||
| 		attributes.put("linkcss", true); | ||||
| 		attributes.put("icons", "font"); | ||||
| 		attributes.put("stylesheet", "css/spring.css"); | ||||
| 		asciidoctorTask.getAttributeProviders().add(new AsciidoctorAttributeProvider() { | ||||
| 			@Override | ||||
| 			public Map<String, Object> getAttributes() { | ||||
| 				Object version = project.getVersion(); | ||||
| 				Map<String, Object> attrs = new HashMap<>(); | ||||
| 				if (version != null && version.toString() != Project.DEFAULT_VERSION) { | ||||
| 					attrs.put("revnumber", version); | ||||
| 				} | ||||
| 				return attrs; | ||||
| 			} | ||||
| 		}); | ||||
| 		asciidoctorTask.attributes(attributes); | ||||
| 	} | ||||
| 
 | ||||
| 	private void configureCommonAttributes(Project project, AbstractAsciidoctorTask asciidoctorTask) { | ||||
| 		Map<String, Object> attributes = new HashMap<>(); | ||||
| 		attributes.put("attribute-missing", "warn"); | ||||
| 		attributes.put("icons", "font"); | ||||
| 		attributes.put("idprefix", ""); | ||||
| 		attributes.put("idseparator", "-"); | ||||
| 		attributes.put("docinfo", "shared"); | ||||
| 		attributes.put("sectanchors", ""); | ||||
| 		attributes.put("sectnums", ""); | ||||
| 		attributes.put("today-year", LocalDate.now().getYear()); | ||||
| 		asciidoctorTask.attributes(attributes); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.ArtifactoryPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.MavenBomPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.CheckstylePlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.DependencySetPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.DocsPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.IntegrationTestPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.JacocoPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.JavadocApiPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.JavadocOptionsPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringMavenPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.MergePlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.OssrhPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.RepositoryConventionPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.RootProjectPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringModulePlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringPomPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringSampleBootPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringSampleWarPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringSamplePlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringTestPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.SpringDependencyManagementConventionPlugin | ||||
|  | @ -0,0 +1 @@ | |||
| implementation-class=io.spring.gradle.convention.TestsConfigurationPlugin | ||||
|  | @ -0,0 +1,37 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.junit.Rule | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||
| 
 | ||||
| class DependencySetPluginITest extends Specification { | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "dependencies"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/dependencyset") | ||||
| 			.withArguments('dependencies') | ||||
| 			.build(); | ||||
| 		then: | ||||
| 		result.task(":dependencies").outcome == SUCCESS | ||||
| 		!result.output.contains("FAILED") | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,95 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.junit.Rule | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| import java.util.zip.ZipFile | ||||
| 
 | ||||
| import static org.gradle.testkit.runner.TaskOutcome.FAILED | ||||
| import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||
| 
 | ||||
| class DocsPluginITest extends Specification { | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "build triggers docs"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/docs/simple/") | ||||
| 			.withArguments('build') | ||||
| 			.build(); | ||||
| 		then: | ||||
| 		result.task(":build").outcome == SUCCESS | ||||
| 		and: | ||||
| 		result.task(":docs").outcome == SUCCESS | ||||
| 		and: | ||||
| 		result.task(":docsZip").outcome == SUCCESS | ||||
| 		and: | ||||
| 		def zip = new File(testKit.getRootDir(), 'build/distributions/simple-1.0.0.BUILD-SNAPSHOT-docs.zip') | ||||
| 		def names = new ZipFile(zip).entries()*.name | ||||
| 		names.contains("docs/reference/html5/index.html") | ||||
| 		names.contains("docs/reference/pdf/simple-reference.pdf") | ||||
| 	} | ||||
| 
 | ||||
| 	def "asciidoc copies images"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/docs/simple/") | ||||
| 				.withArguments('asciidoctor') | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.task(":asciidoctor").outcome == SUCCESS | ||||
| 		new File(testKit.getRootDir(), "build/docs/asciidoc/images").exists() | ||||
| 	} | ||||
| 
 | ||||
| 	def "asciidoc docinfo from resources used"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/docs/simple/") | ||||
| 				.withArguments('asciidoctor') | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.task(":asciidoctor").outcome == SUCCESS | ||||
| 		new File(testKit.getRootDir(), "build/docs/asciidoc/index.html").getText().contains("""<script type="text/javascript" src="js/tocbot/tocbot.min.js"></script>""") | ||||
| 	} | ||||
| 
 | ||||
| 	def "missing attribute fails"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/docs/missing-attribute/") | ||||
| 				.withArguments(':asciidoctor') | ||||
| 				.buildAndFail(); | ||||
| 		then: | ||||
| 		result.task(":asciidoctor").outcome == FAILED | ||||
| 	} | ||||
| 
 | ||||
| 	def "missing include"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/docs/missing-include/") | ||||
| 				.withArguments(':asciidoctor') | ||||
| 				.buildAndFail(); | ||||
| 		then: | ||||
| 		result.task(":asciidoctor").outcome == FAILED | ||||
| 	} | ||||
| 
 | ||||
| 	def "missing cross reference"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/docs/missing-cross-reference/") | ||||
| 				.withArguments(':asciidoctor') | ||||
| 				.buildAndFail(); | ||||
| 		then: | ||||
| 		result.task(":asciidoctor").outcome == FAILED | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,63 @@ | |||
| /* | ||||
|  * Copyright 2016-2018 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.junit.Rule | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||
| 
 | ||||
| class IntegrationTestPluginITest extends Specification { | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "check with java plugin"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/integrationtest/withjava/") | ||||
| 				.withArguments('check') | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.task(":check").outcome == SUCCESS | ||||
| 		and: | ||||
| 		new File(testKit.getRootDir(), 'build/test-results/integrationTest/').exists() | ||||
| 		new File(testKit.getRootDir(), 'build/reports/tests/integrationTest/').exists() | ||||
| 	} | ||||
| 
 | ||||
| 	def "check with propdeps"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/integrationtest/withpropdeps/") | ||||
| 				.withArguments('check') | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.task(":check").outcome == SUCCESS | ||||
| 		and: | ||||
| 		new File(testKit.getRootDir(), 'build/test-results/integrationTest/').exists() | ||||
| 		new File(testKit.getRootDir(), 'build/reports/tests/integrationTest/').exists() | ||||
| 	} | ||||
| 
 | ||||
| 	def "check with groovy plugin"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/integrationtest/withgroovy/") | ||||
| 			.withArguments('check') | ||||
| 			.build(); | ||||
| 		then: | ||||
| 		result.task(":check").outcome == SUCCESS | ||||
| 		and: | ||||
| 		new File(testKit.getRootDir(), 'build/test-results/integrationTest/').exists() | ||||
| 		new File(testKit.getRootDir(), 'build/reports/tests/integrationTest/').exists() | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,39 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.junit.Rule | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||
| 
 | ||||
| class JacocoPluginITest extends Specification { | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "check with java plugin"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/jacoco/java/") | ||||
| 				.withArguments('check') | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.task(":check").outcome == SUCCESS | ||||
| 		and: | ||||
| 		new File(testKit.getRootDir(), 'build/jacoco').exists() | ||||
| 		new File(testKit.getRootDir(), 'build/reports/jacoco/test/html/').exists() | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,48 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.gradle.testkit.runner.GradleRunner | ||||
| import org.junit.Rule | ||||
| import org.junit.rules.TemporaryFolder | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| import static org.gradle.testkit.runner.TaskOutcome.*; | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.apache.commons.io.FileUtils | ||||
| 
 | ||||
| class JavadocApiPluginITest extends Specification { | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "multimodule api"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/javadocapi/multimodule/") | ||||
| 			.withArguments('api') | ||||
| 			.build(); | ||||
| 		then: | ||||
| 		result.task(":api").outcome == SUCCESS | ||||
| 		and: | ||||
| 		File allClasses = new File(testKit.getRootDir(), 'build/api/allclasses-noframe.html'); | ||||
| 		File index = new File(testKit.getRootDir(), 'build/api/allclasses.html'); | ||||
|         new File(testKit.getRootDir(), "build/api/").listFiles().each { println it } | ||||
| 		File listing = allClasses.exists() ? allClasses : index | ||||
| 		listing.text.contains('sample/Api.html') | ||||
|         listing.text.contains('sample/Impl.html') | ||||
| 		!listing.text.contains('sample/Sample.html') | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,130 @@ | |||
| /* | ||||
|  * Copyright 2016-2019 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.gradle.testkit.runner.TaskOutcome | ||||
| import org.junit.Rule | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| class ShowcaseITest extends Specification { | ||||
| 
 | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "build"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/showcase/") | ||||
| 				.withArguments('build','--stacktrace') | ||||
| 				.forwardOutput() | ||||
| 				.build(); | ||||
| 		then: 'entire build passes' | ||||
| 		result.output.contains("BUILD SUCCESSFUL") | ||||
| 
 | ||||
| 		and: 'javadoc api works' | ||||
| 
 | ||||
| 		and: 'integration tests run' | ||||
| 		new File(testKit.getRootDir(), 'samples/sgbcs-sample-war/build/test-results/integrationTest/').exists() | ||||
| 		new File(testKit.getRootDir(), 'samples/sgbcs-sample-war/build/reports/tests/integrationTest/').exists() | ||||
| 	} | ||||
| 
 | ||||
| 	def "install"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/showcase/") | ||||
| 				.withArguments('install','--stacktrace') | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.output.contains("SUCCESS") | ||||
| 
 | ||||
| 		and: 'pom exists' | ||||
| 		File pom = new File(testKit.getRootDir(), 'sgbcs-core/build/poms/pom-default.xml') | ||||
| 		pom.exists() | ||||
| 		String pomText = pom.getText() | ||||
| 
 | ||||
| 		and: 'pom does not contain <dependencyManagement>' | ||||
| 		!pomText.contains('<dependencyManagement>') | ||||
| 
 | ||||
| 		and: 'creates optional dependencies correctly' | ||||
| 		pomText.replaceAll('\\s','').contains("""<dependency> | ||||
| 			<groupId>org.springframework</groupId> | ||||
| 			<artifactId>spring-test</artifactId> | ||||
| 			<scope>test</scope> | ||||
| 			<version>4.3.6.RELEASE</version> | ||||
| 		</dependency>""".replaceAll('\\s','')) | ||||
| 
 | ||||
| 		and: 'adds author' | ||||
| 		pomText.replaceAll('\\s','').contains("""<developers> | ||||
| 			<developer> | ||||
| 				<id>rwinch</id> | ||||
| 				<name>Rob Winch</name> | ||||
| 				<email>rwinch@pivotal.io</email> | ||||
| 			</developer> | ||||
| 			<developer> | ||||
| 				<id>jgrandja</id> | ||||
| 				<name>Joe Grandja</name> | ||||
| 				<email>jgrandja@pivotal.io</email> | ||||
| 			</developer> | ||||
| 		</developers>""".replaceAll('\\s','')) | ||||
| 
 | ||||
| 		and: 'adds repositories' | ||||
| 		pomText.replaceAll('\\s','').contains("""<scm> | ||||
| 			<connection>scm:git:git://github.com/spring-projects/spring-security</connection> | ||||
| 			<developerConnection>scm:git:git://github.com/spring-projects/spring-security</developerConnection> | ||||
| 			<url>https://github.com/spring-projects/spring-security</url> | ||||
| 		</scm>""".replaceAll('\\s','')) | ||||
| 
 | ||||
| 		and: 'adds description & url' | ||||
| 		pomText.contains('<description>sgbcs-core</description>') | ||||
| 		pomText.contains('<url>https://spring.io/spring-security</url>') | ||||
| 
 | ||||
| 		and: 'adds organization' | ||||
| 		pomText.replaceAll('\\s','').contains('''<organization> | ||||
| 			<name>spring.io</name> | ||||
| 			<url>https://spring.io/</url> | ||||
| 		</organization>'''.replaceAll('\\s','')) | ||||
| 
 | ||||
| 		and: 'adds licenses' | ||||
| 		pomText.replaceAll('\\s','').contains('''	<licenses> | ||||
| 			<license> | ||||
| 				<name>The Apache Software License, Version 2.0</name> | ||||
| 				<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> | ||||
| 				<distribution>repo</distribution> | ||||
| 			</license> | ||||
| 		</licenses>'''.replaceAll('\\s','')) | ||||
| 
 | ||||
| 		and: 'adds scm' | ||||
| 		pomText.replaceAll('\\s','').replaceAll('\\s','').contains("""<scm> | ||||
| 			<connection>scm:git:git://github.com/spring-projects/spring-security</connection> | ||||
| 			<developerConnection>scm:git:git://github.com/spring-projects/spring-security</developerConnection> | ||||
| 			<url>https://github.com/spring-projects/spring-security</url> | ||||
| 		</scm>""".replaceAll('\\s','')) | ||||
| 
 | ||||
| 		and: 'bom created' | ||||
| 		File bom = new File(testKit.getRootDir(), 'bom/build/poms/pom-default.xml') | ||||
| 		bom.exists() | ||||
| 		String bomText = bom.getText() | ||||
| 		bomText.contains("""<artifactId>sgbcs-core</artifactId>""") | ||||
| 
 | ||||
| 		when: 'mavenBom ran again' | ||||
| 		result = testKit.withProjectResource("samples/showcase/") | ||||
| 				.withArguments('mavenBom','--stacktrace') | ||||
| 				.build(); | ||||
| 		then: 'mavenBom is not up to date since install is never up to date' | ||||
| 		result.task(':bom:mavenBom').getOutcome() == TaskOutcome.SUCCESS | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,88 @@ | |||
| /* | ||||
|  * Copyright 2016-2019 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.junit.Rule | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||
| 
 | ||||
| class SpringMavenPluginITest extends Specification { | ||||
| 
 | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "install"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/maven/install") | ||||
| 			.withArguments('install') | ||||
| 			.build(); | ||||
| 		then: 'pom contains optional' | ||||
| 		result.output.contains("SUCCESS") | ||||
| 		File pom = new File(testKit.getRootDir(), 'build/poms/pom-default.xml') | ||||
| 		pom.exists() | ||||
| 		String pomText = pom.getText() | ||||
| 		pomText.replaceAll('\\s','').contains("""<dependency> | ||||
| 			<groupId>aopalliance</groupId> | ||||
| 			<artifactId>aopalliance</artifactId> | ||||
| 			<version>1.0</version> | ||||
| 			<scope>compile</scope> | ||||
| 			<optional>true</optional> | ||||
| 		</dependency>""".replaceAll('\\s','')) | ||||
| 	} | ||||
| 
 | ||||
| 	def "signArchives when in memory"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/maven/signing") | ||||
| 				.withArguments('signArchives') | ||||
| 				.withEnvironment(["ORG_GRADLE_PROJECT_signingKey" : signingKey, | ||||
| 								  "ORG_GRADLE_PROJECT_signingPassword" : "password"]) | ||||
| 				.forwardOutput() | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.output.contains("SUCCESS") | ||||
| 		File jar = new File(testKit.getRootDir(), 'build/libs/signing-1.0.0.RELEASE.jar') | ||||
| 		jar.exists() | ||||
| 		File signature = new File("${jar.absolutePath}.asc") | ||||
| 		signature.exists() | ||||
| 	} | ||||
| 
 | ||||
| 	def "upload"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/maven/upload") | ||||
| 				.withArguments('uploadArchives') | ||||
| 				.forwardOutput() | ||||
| 				.build(); | ||||
| 		then: 'pom contains optional' | ||||
| 		result.output.contains("SUCCESS") | ||||
| 		File pom = new File(testKit.getRootDir(), 'build/poms/pom-default.xml') | ||||
| 		pom.exists() | ||||
| 		String pomText = pom.getText() | ||||
| 		pomText.replaceAll('\\s','').contains("""<dependency> | ||||
| 			<groupId>aopalliance</groupId> | ||||
| 			<artifactId>aopalliance</artifactId> | ||||
| 			<version>1.0</version> | ||||
| 			<scope>compile</scope> | ||||
| 			<optional>true</optional> | ||||
| 			</dependency>""".replaceAll('\\s','')) | ||||
| 	} | ||||
| 
 | ||||
| 	def getSigningKey() { | ||||
| 		getClass().getResource("/test-private.pgp").text | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,36 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.convention | ||||
| 
 | ||||
| import io.spring.gradle.testkit.junit.rules.TestKit | ||||
| import org.gradle.testkit.runner.BuildResult | ||||
| import org.junit.Rule | ||||
| import spock.lang.Specification | ||||
| 
 | ||||
| import static org.gradle.testkit.runner.TaskOutcome.SUCCESS | ||||
| 
 | ||||
| class TestsConfigurationPluginITest extends Specification { | ||||
| 	@Rule final TestKit testKit = new TestKit() | ||||
| 
 | ||||
| 	def "can find dependency"() { | ||||
| 		when: | ||||
| 		BuildResult result = testKit.withProjectResource("samples/testsconfiguration") | ||||
| 				.withArguments('check') | ||||
| 				.build(); | ||||
| 		then: | ||||
| 		result.task(":web:check").outcome == SUCCESS | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,75 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package io.spring.gradle.testkit.junit.rules; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.net.URISyntaxException; | ||||
| import java.net.URL; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.Enumeration; | ||||
| 
 | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.gradle.testkit.runner.GradleRunner; | ||||
| import org.junit.rules.TemporaryFolder; | ||||
| import org.junit.rules.TestRule; | ||||
| import org.junit.runner.Description; | ||||
| import org.junit.runners.model.Statement; | ||||
| 
 | ||||
| public class TestKit implements TestRule { | ||||
| 	final TemporaryFolder testProjectDir = new TemporaryFolder(); | ||||
| 	File buildDir; | ||||
| 
 | ||||
| 	@Override | ||||
| 	public Statement apply(Statement base, Description description) { | ||||
| 		Statement wrapped = new Statement() { | ||||
| 
 | ||||
| 			@Override | ||||
| 			public void evaluate() throws Throwable { | ||||
| 				try { | ||||
| 					buildDir = testProjectDir.newFolder(); | ||||
| 				} catch(IOException e) { | ||||
| 					throw new RuntimeException(e); | ||||
| 				} | ||||
| 				base.evaluate(); | ||||
| 			} | ||||
| 		}; | ||||
| 		return testProjectDir.apply(wrapped, description); | ||||
| 	} | ||||
| 
 | ||||
| 	public File getRootDir() { | ||||
| 		return buildDir; | ||||
| 	} | ||||
| 
 | ||||
| 	public GradleRunner withProjectDir(File projectDir) throws IOException { | ||||
| 		FileUtils.copyDirectory(projectDir, buildDir); | ||||
| 		return GradleRunner.create() | ||||
| 			.withProjectDir(buildDir) | ||||
| 			.withPluginClasspath(); | ||||
| 	} | ||||
| 
 | ||||
| 	public GradleRunner withProjectResource(String projectResourceName) throws IOException, URISyntaxException { | ||||
| 		ClassLoader classLoader = getClass().getClassLoader(); | ||||
| 		Enumeration<URL> resources = classLoader.getResources(projectResourceName); | ||||
| 		if(!resources.hasMoreElements()) { | ||||
| 			throw new IOException("Cannot find resource " + projectResourceName + " with " + classLoader); | ||||
| 		} | ||||
| 		URL resourceUrl = resources.nextElement(); | ||||
| 		File projectDir = Paths.get(resourceUrl.toURI()).toFile(); | ||||
| 		return withProjectDir(projectDir); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,53 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.plugins.JavaPlugin; | ||||
| import org.gradle.api.tasks.javadoc.Javadoc; | ||||
| import org.gradle.testfixtures.ProjectBuilder; | ||||
| import org.junit.After; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import java.io.File; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class IntegrationPluginTest { | ||||
| 	Project rootProject; | ||||
| 
 | ||||
| 	@After | ||||
| 	public void cleanup() throws Exception { | ||||
| 		if (rootProject != null) { | ||||
| 			FileUtils.deleteDirectory(rootProject.getProjectDir()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenNoSourceThenIntegrationTestTaskNull() { | ||||
| 		rootProject = ProjectBuilder.builder().build(); | ||||
| 		rootProject.getPlugins().apply(JavaPlugin.class); | ||||
| 		rootProject.getPlugins().apply(IntegrationTestPlugin.class); | ||||
| 
 | ||||
| 		assertThat(rootProject.getTasks().findByPath("integrationTest")).isNull(); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,56 @@ | |||
| /* | ||||
|  * Copyright 2002-2016 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import java.io.File; | ||||
| 
 | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.tasks.javadoc.Javadoc; | ||||
| import org.gradle.testfixtures.ProjectBuilder; | ||||
| import org.junit.After; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| /** | ||||
|  * @author Rob Winch | ||||
|  */ | ||||
| public class JavadocApiPluginTest { | ||||
| 	Project rootProject; | ||||
| 
 | ||||
| 	@After | ||||
| 	public void cleanup() throws Exception { | ||||
| 		if (rootProject != null) { | ||||
| 			FileUtils.deleteDirectory(rootProject.getProjectDir()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenNotOverrideThenPropertiesDefaulted() { | ||||
| 		rootProject = ProjectBuilder.builder().build(); | ||||
| 		rootProject.getPlugins().apply(JavadocApiPlugin.class); | ||||
| 
 | ||||
| 		Javadoc apiTask = (Javadoc) rootProject.getTasks().getByPath("api"); | ||||
| 
 | ||||
| 		assertThat(apiTask).isNotNull(); | ||||
| 		assertThat(apiTask.getGroup()).isEqualTo("Documentation"); | ||||
| 		assertThat(apiTask.getDescription()).isEqualTo("Generates aggregated Javadoc API documentation."); | ||||
| 		assertThat(apiTask.getMaxMemory()).isEqualTo("1024m"); | ||||
| 		assertThat(apiTask.getDestinationDir()).isEqualTo(new File(rootProject.getBuildDir(), "api")); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,158 @@ | |||
| /* | ||||
|  * Copyright 2016-2018 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| 
 | ||||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.artifacts.dsl.RepositoryHandler; | ||||
| import org.gradle.api.artifacts.repositories.ArtifactRepository; | ||||
| import org.gradle.api.artifacts.repositories.MavenArtifactRepository; | ||||
| import org.gradle.api.plugins.ExtraPropertiesExtension; | ||||
| import org.gradle.testfixtures.ProjectBuilder; | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| 
 | ||||
| /** | ||||
|  * Tests for {@link RepositoryConventionPlugin}. | ||||
|  */ | ||||
| public class RepositoryConventionPluginTests { | ||||
| 
 | ||||
| 	private Project project = ProjectBuilder.builder().build(); | ||||
| 
 | ||||
| 	@Before | ||||
| 	public void setUp() { | ||||
| 		this.project.getProperties().clear(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsReleaseThenShouldIncludeReleaseRepo() { | ||||
| 		this.project.setVersion("1.0.0.RELEASE"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertReleaseRepository(repositories); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsMilestoneThenShouldIncludeMilestoneRepo() { | ||||
| 		this.project.setVersion("1.0.0.M1"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertMilestoneRepository(repositories); // milestone | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsSnapshotThenShouldIncludeSnapshotRepo() { | ||||
| 		this.project.setVersion("1.0.0.BUILD-SNAPSHOT"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertSnapshotRepository(repositories); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsSnapshotWithForceReleaseThenShouldOnlyIncludeReleaseRepo() { | ||||
| 		this.project.getExtensions().getByType(ExtraPropertiesExtension.class) | ||||
| 				.set("forceMavenRepositories", "release"); | ||||
| 		this.project.setVersion("1.0.0.RELEASE"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertReleaseRepository(repositories); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsReleaseWithForceMilestoneThenShouldIncludeMilestoneRepo() { | ||||
| 		this.project.getExtensions().getByType(ExtraPropertiesExtension.class) | ||||
| 				.set("forceMavenRepositories", "milestone"); | ||||
| 		this.project.setVersion("1.0.0.RELEASE"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertMilestoneRepository(repositories); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsReleaseWithForceSnapshotThenShouldIncludeSnapshotRepo() { | ||||
| 		this.project.getExtensions().getByType(ExtraPropertiesExtension.class) | ||||
| 				.set("forceMavenRepositories", "snapshot"); | ||||
| 		this.project.setVersion("1.0.0.RELEASE"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertSnapshotRepository(repositories); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsReleaseWithForceLocalThenShouldIncludeReleaseAndLocalRepos() { | ||||
| 		this.project.getExtensions().getByType(ExtraPropertiesExtension.class) | ||||
| 				.set("forceMavenRepositories", "local"); | ||||
| 		this.project.setVersion("1.0.0.RELEASE"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertThat(repositories).hasSize(4); | ||||
| 		assertThat((repositories.get(0)).getName()).isEqualTo("MavenLocal"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void applyWhenIsReleaseWithForceMilestoneAndLocalThenShouldIncludeMilestoneAndLocalRepos() { | ||||
| 		this.project.getExtensions().getByType(ExtraPropertiesExtension.class) | ||||
| 				.set("forceMavenRepositories", "milestone,local"); | ||||
| 		this.project.setVersion("1.0.0.RELEASE"); | ||||
| 		this.project.getPluginManager().apply(RepositoryConventionPlugin.class); | ||||
| 
 | ||||
| 		RepositoryHandler repositories = this.project.getRepositories(); | ||||
| 		assertThat(repositories).hasSize(5); | ||||
| 		assertThat((repositories.get(0)).getName()).isEqualTo("MavenLocal"); | ||||
| 	} | ||||
| 
 | ||||
| 	private void assertSnapshotRepository(RepositoryHandler repositories) { | ||||
| 		assertThat(repositories).extracting(ArtifactRepository::getName).hasSize(5); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(0)).getUrl().toString()) | ||||
| 				.isEqualTo("https://repo.maven.apache.org/maven2/"); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(1)).getUrl().toString()) | ||||
| 				.isEqualTo("https://jcenter.bintray.com/"); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(2)).getUrl().toString()) | ||||
| 				.isEqualTo("https://repo.spring.io/snapshot/"); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(3)).getUrl().toString()) | ||||
| 				.isEqualTo("https://repo.spring.io/milestone/"); | ||||
| 	} | ||||
| 
 | ||||
| 	private void assertMilestoneRepository(RepositoryHandler repositories) { | ||||
| 		assertThat(repositories).extracting(ArtifactRepository::getName).hasSize(4); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(0)).getUrl().toString()) | ||||
| 				.isEqualTo("https://repo.maven.apache.org/maven2/"); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(1)).getUrl().toString()) | ||||
| 				.isEqualTo("https://jcenter.bintray.com/"); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(2)).getUrl().toString()) | ||||
| 				.isEqualTo("https://repo.spring.io/milestone/"); | ||||
| 	} | ||||
| 
 | ||||
| 	private void assertReleaseRepository(RepositoryHandler repositories) { | ||||
| 		assertThat(repositories).extracting(ArtifactRepository::getName).hasSize(3); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(0)).getUrl().toString()) | ||||
| 				.isEqualTo("https://repo.maven.apache.org/maven2/"); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(1)).getUrl().toString()) | ||||
| 				.isEqualTo("https://jcenter.bintray.com/"); | ||||
| 		assertThat(((MavenArtifactRepository) repositories.get(2)).getUrl().toString()) | ||||
| 				.isEqualTo("https://repo.spring.io/release/"); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,151 @@ | |||
| package io.spring.gradle.convention; | ||||
| 
 | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| import static org.mockito.Mockito.when; | ||||
| 
 | ||||
| import org.gradle.api.Project; | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.mockito.Mock; | ||||
| import org.mockito.junit.MockitoJUnitRunner; | ||||
| 
 | ||||
| @RunWith(MockitoJUnitRunner.class) | ||||
| public class UtilsTest { | ||||
| 	@Mock | ||||
| 	Project project; | ||||
| 	@Mock | ||||
| 	Project rootProject; | ||||
| 
 | ||||
| 	@Before | ||||
| 	public void setup() { | ||||
| 		when(project.getRootProject()).thenReturn(rootProject); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void getProjectName() { | ||||
| 		when(rootProject.getName()).thenReturn("spring-security"); | ||||
| 
 | ||||
| 		assertThat(Utils.getProjectName(project)).isEqualTo("spring-security"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void getProjectNameWhenEndsWithBuildThenStrippedOut() { | ||||
| 		when(rootProject.getName()).thenReturn("spring-security-build"); | ||||
| 
 | ||||
| 		assertThat(Utils.getProjectName(project)).isEqualTo("spring-security"); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isSnapshotValidWithDot() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0.BUILD-SNAPSHOT"); | ||||
| 
 | ||||
| 		assertThat(Utils.isSnapshot(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isSnapshotValidWithNoBuild() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0-SNAPSHOT"); | ||||
| 
 | ||||
| 		assertThat(Utils.isSnapshot(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isSnapshotValidWithDash() { | ||||
| 		when(project.getVersion()).thenReturn("Theme-BUILD-SNAPSHOT"); | ||||
| 
 | ||||
| 		assertThat(Utils.isSnapshot(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isSnapshotInvalid() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0.SNAPSHOT"); | ||||
| 
 | ||||
| 		assertThat(Utils.isSnapshot(project)).isFalse(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isMilestoneValidWithDot() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0.M1"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isMilestoneValidWithDash() { | ||||
| 		when(project.getVersion()).thenReturn("Theme-M1"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isMilestoneValidWithNumberDash() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0-M1"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isMilestoneInvalid() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0.M"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isFalse(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isReleaseCandidateValidWithDot() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0.RC1"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isReleaseCandidateValidWithNumberDash() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0-RC1"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isReleaseCandidateValidWithDash() { | ||||
| 		when(project.getVersion()).thenReturn("Theme-RC1"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isReleaseCandidateInvalid() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0.RC"); | ||||
| 
 | ||||
| 		assertThat(Utils.isMilestone(project)).isFalse(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isReleaseValidWithDot() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0.RELEASE"); | ||||
| 
 | ||||
| 		assertThat(Utils.isRelease(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isReleaseValidWithNoRelease() { | ||||
| 		when(project.getVersion()).thenReturn("1.0.0"); | ||||
| 
 | ||||
| 		assertThat(Utils.isRelease(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isReleaseValidWithDash() { | ||||
| 		when(project.getVersion()).thenReturn("Theme-RELEASE"); | ||||
| 
 | ||||
| 		assertThat(Utils.isRelease(project)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void isServiceReleaseValid() { | ||||
| 		when(project.getVersion()).thenReturn("Theme-SR1"); | ||||
| 
 | ||||
| 		assertThat(Utils.isRelease(project)).isTrue(); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,21 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.dependency-set' | ||||
| } | ||||
| 
 | ||||
| apply plugin: 'java' | ||||
| apply from: "$rootDir/gradle/dependency-management.gradle" | ||||
| 
 | ||||
| repositories { | ||||
| 	mavenCentral() | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
| 	testCompile spockDependencies | ||||
| 	testCompile gebDependencies | ||||
| 	testCompile powerMockDependencies | ||||
| 	testCompile seleniumDependencies | ||||
| 	testCompile slf4jDependencies | ||||
| 	testCompile springCoreDependency | ||||
| 	testCompile jstlDependencies | ||||
| 	testCompile apachedsDependencies | ||||
| } | ||||
|  | @ -0,0 +1,724 @@ | |||
| // we use this to mock dependency management plugin | ||||
| 
 | ||||
| def deps = [ | ||||
| 	"antlr:antlr" : "2.7.7", | ||||
| 	"aopalliance:aopalliance" : "1.0", | ||||
| 	"biz.paluch.redis:lettuce" : "5.0.0.Beta1", | ||||
| 	"ch.qos.logback:logback-access" : "1.1.9", | ||||
| 	"ch.qos.logback:logback-classic" : "1.1.9", | ||||
| 	"ch.qos.logback:logback-core" : "1.1.9", | ||||
| 	"com.atomikos:transactions-jdbc" : "3.9.3", | ||||
| 	"com.atomikos:transactions-jms" : "3.9.3", | ||||
| 	"com.atomikos:transactions-jta" : "3.9.3", | ||||
| 	"com.caucho:hessian" : "4.0.38", | ||||
| 	"com.couchbase.client:couchbase-spring-cache" : "2.1.0", | ||||
| 	"com.couchbase.client:java-client" : "2.3.7", | ||||
| 	"com.datastax.cassandra:cassandra-driver-core" : "3.1.3", | ||||
| 	"com.datastax.cassandra:cassandra-driver-mapping" : "3.1.3", | ||||
| 	"com.esotericsoftware:kryo" : "3.0.3", | ||||
| 	"com.esotericsoftware:kryo-shaded" : "3.0.3", | ||||
| 	"com.fasterxml:classmate" : "1.3.3", | ||||
| 	"com.fasterxml.jackson.core:jackson-annotations" : "2.8.0", | ||||
| 	"com.fasterxml.jackson.core:jackson-core" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.core:jackson-databind" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-avro" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-cbor" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-csv" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-properties" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-protobuf" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-smile" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-xml" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.dataformat:jackson-dataformat-yaml" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-guava" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-hibernate3" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-hibernate4" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-hibernate5" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-hppc" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-jaxrs" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-jdk8" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-joda" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-json-org" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-jsr310" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-jsr353" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.datatype:jackson-datatype-pcollections" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jaxrs:jackson-jaxrs-base" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jaxrs:jackson-jaxrs-cbor-provider" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jaxrs:jackson-jaxrs-smile-provider" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jaxrs:jackson-jaxrs-xml-provider" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jaxrs:jackson-jaxrs-yaml-provider" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jr:jackson-jr-all" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jr:jackson-jr-objects" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jr:jackson-jr-retrofit2" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.jr:jackson-jr-stree" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-afterburner" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-guice" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-jaxb-annotations" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-jsonSchema" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-kotlin" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-mrbean" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-osgi" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-parameter-names" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-paranamer" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-scala_2.10" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-scala_2.11" : "2.8.6", | ||||
| 	"com.fasterxml.jackson.module:jackson-module-scala_2.12" : "2.8.6", | ||||
| 	"com.gemstone.gemfire:gemfire" : "8.2.0", | ||||
| 	"com.github.ben-manes.caffeine:caffeine" : "2.3.5", | ||||
| 	"com.github.mxab.thymeleaf.extras:thymeleaf-extras-data-attribute" : "1.3", | ||||
| 	"com.github.spullara.redis:client" : "0.7", | ||||
| 	"com.goldmansachs:gs-collections" : "5.1.0", | ||||
| 	"com.google.appengine:appengine-api-1.0-sdk" : "1.9.48", | ||||
| 	"com.google.code.findbugs:annotations" : "2.0.3", | ||||
| 	"com.google.code.findbugs:jsr305" : "3.0.1", | ||||
| 	"com.google.code.gson:gson" : "2.8.0", | ||||
| 	"com.google.code.typica:typica" : "1.3", | ||||
| 	"com.google.guava:guava" : "20.0", | ||||
| 	"com.google.inject:guice" : "3.0", | ||||
| 	"com.google.protobuf:protobuf-java" : "2.6.1", | ||||
| 	"com.googlecode.json-simple:json-simple" : "1.1.1", | ||||
| 	"com.googlecode.protobuf-java-format:protobuf-java-format" : "1.4", | ||||
| 	"com.h2database:h2" : "1.4.193", | ||||
| 	"com.hazelcast:hazelcast" : "3.7.5", | ||||
| 	"com.hazelcast:hazelcast-client" : "3.7.5", | ||||
| 	"com.hazelcast:hazelcast-hibernate4" : "3.7.1", | ||||
| 	"com.hazelcast:hazelcast-hibernate5" : "1.1.3", | ||||
| 	"com.hazelcast:hazelcast-spring" : "3.7.5", | ||||
| 	"com.ibm.jbatch:com.ibm.jbatch-tck-spi" : "1.0", | ||||
| 	"com.ibm.websphere:uow" : "6.0.2.17", | ||||
| 	"com.jamonapi:jamon" : "2.81", | ||||
| 	"com.jayway.jsonpath:json-path" : "2.2.0", | ||||
| 	"com.jayway.jsonpath:json-path-assert" : "2.2.0", | ||||
| 	"com.jayway.restassured:rest-assured" : "2.9.0", | ||||
| 	"com.jcraft:jsch" : "0.1.54", | ||||
| 	"com.lowagie:itext" : "2.1.7", | ||||
| 	"com.maxmind.geoip2:geoip2" : "2.3.1", | ||||
| 	"com.mchange:c3p0" : "0.9.5.2", | ||||
| 	"com.microsoft.sqlserver:mssql-jdbc" : "6.1.0.jre7", | ||||
| 	"com.querydsl:querydsl-apt" : "4.1.4", | ||||
| 	"com.querydsl:querydsl-collections" : "4.1.4", | ||||
| 	"com.querydsl:querydsl-core" : "4.1.4", | ||||
| 	"com.querydsl:querydsl-jpa" : "4.1.4", | ||||
| 	"com.querydsl:querydsl-mongodb" : "4.1.4", | ||||
| 	"com.rabbitmq:amqp-client" : "4.0.2", | ||||
| 	"com.rabbitmq:http-client" : "1.1.0.RELEASE", | ||||
| 	"com.rometools:rome" : "1.6.1", | ||||
| 	"com.rometools:rome-fetcher" : "1.6.1", | ||||
| 	"com.samskivert:jmustache" : "1.13", | ||||
| 	"com.sendgrid:sendgrid-java" : "2.2.2", | ||||
| 	"com.splunk:splunk" : "1.3.0", | ||||
| 	"com.squareup.okhttp:okhttp" : "2.7.5", | ||||
| 	"com.squareup.okhttp3:okhttp" : "3.6.0", | ||||
| 	"com.sun:ldapbp" : "1.0", | ||||
| 	"com.sun.facelets:jsf-facelets" : "1.1.14", | ||||
| 	"com.sun.faces:jsf-api" : "2.2.14", | ||||
| 	"com.sun.faces:jsf-impl" : "2.2.14", | ||||
| 	"com.sun.mail:imap" : "1.5.6", | ||||
| 	"com.sun.mail:javax.mail" : "1.5.6", | ||||
| 	"com.sun.xml.messaging.saaj:saaj-impl" : "1.3.28", | ||||
| 	"com.sun.xml.wss:xws-security" : "3.0", | ||||
| 	"com.thoughtworks.xstream:xstream" : "1.4.9", | ||||
| 	"com.timgroup:java-statsd-client" : "3.1.0", | ||||
| 	"com.unboundid:unboundid-ldapsdk" : "3.2.0", | ||||
| 	"com.zaxxer:HikariCP" : "2.5.1", | ||||
| 	"com.zaxxer:HikariCP-java6" : "2.3.13", | ||||
| 	"commons-beanutils:commons-beanutils" : "1.9.3", | ||||
| 	"commons-cli:commons-cli" : "1.3.1", | ||||
| 	"commons-codec:commons-codec" : "1.10", | ||||
| 	"commons-collections:commons-collections" : "3.2.2", | ||||
| 	"commons-dbcp:commons-dbcp" : "1.4", | ||||
| 	"commons-digester:commons-digester" : "2.1", | ||||
| 	"commons-fileupload:commons-fileupload" : "1.3.2", | ||||
| 	"commons-httpclient:commons-httpclient" : "3.1", | ||||
| 	"commons-io:commons-io" : "2.5", | ||||
| 	"commons-lang:commons-lang" : "2.6", | ||||
| 	"commons-logging:commons-logging" : "1.2", | ||||
| 	"commons-net:commons-net" : "3.5", | ||||
| 	"commons-pool:commons-pool" : "1.6", | ||||
| 	"de.flapdoodle.embed:de.flapdoodle.embed.mongo" : "1.50.5", | ||||
| 	"dom4j:dom4j" : "1.6.1", | ||||
| 	"edu.umd.cs.mtc:multithreadedtc" : "1.01", | ||||
| 	"io.dropwizard.metrics:metrics-core" : "3.1.2", | ||||
| 	"io.dropwizard.metrics:metrics-ganglia" : "3.1.2", | ||||
| 	"io.dropwizard.metrics:metrics-graphite" : "3.1.2", | ||||
| 	"io.dropwizard.metrics:metrics-servlets" : "3.1.2", | ||||
| 	"io.fastjson:boon" : "0.34", | ||||
| 	"io.javaslang:javaslang" : "2.0.5", | ||||
| 	"io.javaslang:javaslang-match" : "2.0.5", | ||||
| 	"io.netty:netty-all" : "4.0.44.Final", | ||||
| 	"io.projectreactor:reactor-bus" : "2.0.8.RELEASE", | ||||
| 	"io.projectreactor:reactor-core" : "2.0.8.RELEASE", | ||||
| 	"io.projectreactor:reactor-groovy" : "2.0.8.RELEASE", | ||||
| 	"io.projectreactor:reactor-groovy-extensions" : "2.0.8.RELEASE", | ||||
| 	"io.projectreactor:reactor-logback" : "2.0.8.RELEASE", | ||||
| 	"io.projectreactor:reactor-net" : "2.0.8.RELEASE", | ||||
| 	"io.projectreactor:reactor-stream" : "2.0.8.RELEASE", | ||||
| 	"io.projectreactor.spring:reactor-spring-context" : "2.0.7.RELEASE", | ||||
| 	"io.projectreactor.spring:reactor-spring-core" : "2.0.7.RELEASE", | ||||
| 	"io.projectreactor.spring:reactor-spring-messaging" : "2.0.7.RELEASE", | ||||
| 	"io.projectreactor.spring:reactor-spring-webmvc" : "2.0.7.RELEASE", | ||||
| 	"io.searchbox:jest" : "2.0.4", | ||||
| 	"io.undertow:undertow-core" : "1.4.8.Final", | ||||
| 	"io.undertow:undertow-servlet" : "1.4.8.Final", | ||||
| 	"io.undertow:undertow-websockets-jsr" : "1.4.8.Final", | ||||
| 	"javax.activation:activation" : "1.1.1", | ||||
| 	"javax.annotation:jsr250-api" : "1.0", | ||||
| 	"javax.batch:javax.batch-api" : "1.0.1", | ||||
| 	"javax.cache:cache-api" : "1.0.0", | ||||
| 	"javax.ejb:javax.ejb-api" : "3.2", | ||||
| 	"javax.el:javax.el-api" : "2.2.5", | ||||
| 	"javax.enterprise:cdi-api" : "1.2", | ||||
| 	"javax.enterprise.concurrent:javax.enterprise.concurrent-api" : "1.0", | ||||
| 	"javax.faces:javax.faces-api" : "2.2", | ||||
| 	"javax.inject:javax.inject" : "1", | ||||
| 	"javax.interceptor:javax.interceptor-api" : "1.2", | ||||
| 	"javax.jdo:jdo-api" : "3.0.1", | ||||
| 	"javax.jms:jms-api" : "1.1-rev-1", | ||||
| 	"javax.mail:javax.mail-api" : "1.5.6", | ||||
| 	"javax.money:money-api" : "1.0.1", | ||||
| 	"javax.portlet:portlet-api" : "2.0", | ||||
| 	"javax.resource:connector-api" : "1.5", | ||||
| 	"javax.servlet:javax.servlet-api" : "3.1.0", | ||||
| 	"javax.servlet:jstl" : "1.2", | ||||
| 	"javax.servlet.jsp:javax.servlet.jsp-api" : "2.3.1", | ||||
| 	"javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api" : "1.2.1", | ||||
| 	"javax.transaction:javax.transaction-api" : "1.2", | ||||
| 	"javax.validation:validation-api" : "1.1.0.Final", | ||||
| 	"javax.websocket:javax.websocket-api" : "1.1", | ||||
| 	"javax.ws.rs:javax.ws.rs-api" : "2.0.1", | ||||
| 	"jaxen:jaxen" : "1.1.6", | ||||
| 	"jline:jline" : "2.14.3", | ||||
| 	"joda-time:joda-time" : "2.9.7", | ||||
| 	"junit:junit" : "4.12", | ||||
| 	"ldapsdk:ldapsdk" : "4.1", | ||||
| 	"log4j:log4j" : "1.2.17", | ||||
| 	"mysql:mysql-connector-java" : "5.1.40", | ||||
| 	"net.java.dev.jna:jna" : "4.2.2", | ||||
| 	"net.openhft:chronicle" : "3.4.4", | ||||
| 	"net.openhft:lang" : "6.6.16", | ||||
| 	"net.sf.ehcache:ehcache" : "2.10.3", | ||||
| 	"net.sf.jasperreports:jasperreports" : "6.4.0", | ||||
| 	"net.sf.jopt-simple:jopt-simple" : "5.0.3", | ||||
| 	"net.sourceforge.htmlunit:htmlunit" : "2.21", | ||||
| 	"net.sourceforge.jexcelapi:jxl" : "2.6.12", | ||||
| 	"net.sourceforge.jtds:jtds" : "1.3.1", | ||||
| 	"net.sourceforge.nekohtml:nekohtml" : "1.9.22", | ||||
| 	"nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect" : "1.4.0", | ||||
| 	"opensymphony:ognl" : "2.6.11", | ||||
| 	"org.apache.activemq:activemq-amqp" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-blueprint" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-broker" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-camel" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-client" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-console" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-http" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-jaas" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-jdbc-store" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-jms-pool" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-kahadb-store" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-karaf" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-leveldb-store" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-log4j-appender" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-mqtt" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-openwire-generator" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-openwire-legacy" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-osgi" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-partition" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-pool" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-ra" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-run" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-runtime-config" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-shiro" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-spring" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-stomp" : "5.14.3", | ||||
| 	"org.apache.activemq:activemq-web" : "5.14.3", | ||||
| 	"org.apache.activemq:artemis-amqp-protocol" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-commons" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-core-client" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-jms-client" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-jms-server" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-journal" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-native" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-selector" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-server" : "1.5.2", | ||||
| 	"org.apache.activemq:artemis-service-extensions" : "1.5.2", | ||||
| 	"org.apache.commons:commons-dbcp2" : "2.1.1", | ||||
| 	"org.apache.commons:commons-lang3" : "3.5", | ||||
| 	"org.apache.commons:commons-pool2" : "2.4.2", | ||||
| 	"org.apache.curator:curator-recipes" : "2.11.1", | ||||
| 	"org.apache.derby:derby" : "10.13.1.1", | ||||
| 	"org.apache.derby:derbyclient" : "10.13.1.1", | ||||
| 	"org.apache.directory.server:apacheds-core" : "1.5.5", | ||||
| 	"org.apache.directory.server:apacheds-core-entry" : "1.5.5", | ||||
| 	"org.apache.directory.server:apacheds-protocol-ldap" : "1.5.5", | ||||
| 	"org.apache.directory.server:apacheds-protocol-shared" : "1.5.5", | ||||
| 	"org.apache.directory.server:apacheds-server-jndi" : "1.5.5", | ||||
| 	"org.apache.directory.shared:shared-ldap" : "0.9.15", | ||||
| 	"org.apache.httpcomponents:httpasyncclient" : "4.1.2", | ||||
| 	"org.apache.httpcomponents:httpclient" : "4.5.2", | ||||
| 	"org.apache.httpcomponents:httpcore" : "4.4.6", | ||||
| 	"org.apache.httpcomponents:httpmime" : "4.5.2", | ||||
| 	"org.apache.ibatis:ibatis-sqlmap" : "2.3.4.726", | ||||
| 	"org.apache.kafka:kafka-clients" : "0.10.1.1", | ||||
| 	"org.apache.kafka:kafka_2.11" : "0.10.1.1", | ||||
| 	"org.apache.logging.log4j:log4j-1.2-api" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-api" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-api-scala_2.10" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-api-scala_2.11" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-core" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-flume-ng" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-iostreams" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-jcl" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-jmx-gui" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-jul" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-liquibase" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-nosql" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-slf4j-impl" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-taglib" : "2.7", | ||||
| 	"org.apache.logging.log4j:log4j-web" : "2.7", | ||||
| 	"org.apache.myfaces.core:myfaces-impl" : "2.2.11", | ||||
| 	"org.apache.openjpa:openjpa" : "2.4.2", | ||||
| 	"org.apache.openjpa:openjpa-persistence-jdbc" : "2.4.2", | ||||
| 	"org.apache.poi:poi" : "3.15", | ||||
| 	"org.apache.poi:poi-ooxml" : "3.15", | ||||
| 	"org.apache.poi:poi-scratchpad" : "3.15", | ||||
| 	"org.apache.solr:solr-core" : "5.5.3", | ||||
| 	"org.apache.solr:solr-solrj" : "5.5.3", | ||||
| 	"org.apache.taglibs:taglibs-standard-impl" : "1.2.5", | ||||
| 	"org.apache.taglibs:taglibs-standard-jstlel" : "1.2.5", | ||||
| 	"org.apache.taglibs:taglibs-standard-spec" : "1.2.5", | ||||
| 	"org.apache.tiles:tiles-api" : "3.0.7", | ||||
| 	"org.apache.tiles:tiles-core" : "3.0.7", | ||||
| 	"org.apache.tiles:tiles-el" : "3.0.7", | ||||
| 	"org.apache.tiles:tiles-extras" : "3.0.7", | ||||
| 	"org.apache.tiles:tiles-jsp" : "3.0.7", | ||||
| 	"org.apache.tiles:tiles-request-api" : "1.0.6", | ||||
| 	"org.apache.tiles:tiles-servlet" : "3.0.7", | ||||
| 	"org.apache.tomcat:tomcat-catalina" : "8.5.11", | ||||
| 	"org.apache.tomcat:tomcat-dbcp" : "8.5.11", | ||||
| 	"org.apache.tomcat:tomcat-jdbc" : "8.5.11", | ||||
| 	"org.apache.tomcat:tomcat-jsp-api" : "8.5.11", | ||||
| 	"org.apache.tomcat:tomcat-websocket" : "8.5.11", | ||||
| 	"org.apache.tomcat.embed:tomcat-embed-core" : "8.5.11", | ||||
| 	"org.apache.tomcat.embed:tomcat-embed-el" : "8.5.11", | ||||
| 	"org.apache.tomcat.embed:tomcat-embed-jasper" : "8.5.11", | ||||
| 	"org.apache.tomcat.embed:tomcat-embed-websocket" : "8.5.11", | ||||
| 	"org.apache.velocity:velocity" : "1.7", | ||||
| 	"org.apache.ws.commons.axiom:axiom-api" : "1.2.20", | ||||
| 	"org.apache.ws.commons.axiom:axiom-impl" : "1.2.20", | ||||
| 	"org.apache.ws.security:wss4j" : "1.6.19", | ||||
| 	"org.apache.ws.xmlschema:xmlschema-core" : "2.2.1", | ||||
| 	"org.apache.wss4j:wss4j-ws-security-common" : "2.1.8", | ||||
| 	"org.apache.wss4j:wss4j-ws-security-dom" : "2.1.8", | ||||
| 	"org.apache.xmlbeans:xmlbeans" : "2.6.0", | ||||
| 	"org.aspectj:aspectjrt" : "1.8.9", | ||||
| 	"org.aspectj:aspectjtools" : "1.8.9", | ||||
| 	"org.aspectj:aspectjweaver" : "1.8.9", | ||||
| 	"org.assertj:assertj-core" : "2.6.0", | ||||
| 	"org.atteo:evo-inflector" : "1.2.2", | ||||
| 	"org.beanshell:bsh" : "2.0b4", | ||||
| 	"org.bouncycastle:bcpkix-jdk15on" : "1.56", | ||||
| 	"org.codehaus.btm:btm" : "2.1.4", | ||||
| 	"org.codehaus.castor:castor-xml" : "1.4.1", | ||||
| 	"org.codehaus.fabric3.api:commonj" : "1.1.1", | ||||
| 	"org.codehaus.groovy:groovy" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-all" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-ant" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-bsf" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-console" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-docgenerator" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-groovydoc" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-groovysh" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-jmx" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-json" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-jsr223" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-nio" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-servlet" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-sql" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-swing" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-templates" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-test" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-testng" : "2.4.7", | ||||
| 	"org.codehaus.groovy:groovy-xml" : "2.4.7", | ||||
| 	"org.codehaus.jackson:jackson-core-asl" : "1.9.13", | ||||
| 	"org.codehaus.jackson:jackson-mapper-asl" : "1.9.13", | ||||
| 	"org.codehaus.janino:janino" : "2.7.8", | ||||
| 	"org.codehaus.jettison:jettison" : "1.2", | ||||
| 	"org.codehaus.woodstox:woodstox-core-asl" : "4.4.1", | ||||
| 	"org.crashub:crash.cli" : "1.3.2", | ||||
| 	"org.crashub:crash.connectors.ssh" : "1.3.2", | ||||
| 	"org.crashub:crash.connectors.telnet" : "1.3.2", | ||||
| 	"org.crashub:crash.embed.spring" : "1.3.2", | ||||
| 	"org.crashub:crash.plugins.cron" : "1.3.2", | ||||
| 	"org.crashub:crash.plugins.mail" : "1.3.2", | ||||
| 	"org.crashub:crash.shell" : "1.3.2", | ||||
| 	"org.eclipse.jetty:apache-jsp" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:apache-jstl" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-annotations" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-client" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-continuation" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-deploy" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-http" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-io" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-jmx" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-plus" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-proxy" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-security" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-server" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-servlet" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-servlets" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-util" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-webapp" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty:jetty-xml" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty.orbit:javax.servlet.jsp" : "2.2.0.v201112011158", | ||||
| 	"org.eclipse.jetty.websocket:javax-websocket-server-impl" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty.websocket:websocket-client" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.jetty.websocket:websocket-server" : "9.4.1.v20170120", | ||||
| 	"org.eclipse.paho:org.eclipse.paho.client.mqttv3" : "1.1.0", | ||||
| 	"org.eclipse.persistence:javax.persistence" : "2.1.1", | ||||
| 	"org.eclipse.persistence:org.eclipse.persistence.core" : "2.6.4", | ||||
| 	"org.eclipse.persistence:org.eclipse.persistence.jpa" : "2.6.4", | ||||
| 	"org.ehcache:ehcache" : "3.2.0", | ||||
| 	"org.ehcache:ehcache-clustered" : "3.2.0", | ||||
| 	"org.ehcache:ehcache-transactions" : "3.2.0", | ||||
| 	"org.elasticsearch:elasticsearch" : "2.4.4", | ||||
| 	"org.firebirdsql.jdbc:jaybird-jdk16" : "2.2.12", | ||||
| 	"org.firebirdsql.jdbc:jaybird-jdk17" : "2.2.12", | ||||
| 	"org.firebirdsql.jdbc:jaybird-jdk18" : "2.2.12", | ||||
| 	"org.flywaydb:flyway-core" : "3.2.1", | ||||
| 	"org.freemarker:freemarker" : "2.3.25-incubating", | ||||
| 	"org.glassfish:javax.el" : "3.0.0", | ||||
| 	"org.glassfish.jersey.containers:jersey-container-servlet" : "2.25.1", | ||||
| 	"org.glassfish.jersey.containers:jersey-container-servlet-core" : "2.25.1", | ||||
| 	"org.glassfish.jersey.core:jersey-server" : "2.25.1", | ||||
| 	"org.glassfish.jersey.ext:jersey-bean-validation" : "2.25.1", | ||||
| 	"org.glassfish.jersey.ext:jersey-spring3" : "2.25.1", | ||||
| 	"org.glassfish.jersey.media:jersey-media-json-jackson" : "2.25.1", | ||||
| 	"org.glassfish.tyrus:tyrus-container-servlet" : "1.3.5", | ||||
| 	"org.glassfish.tyrus:tyrus-core" : "1.3.5", | ||||
| 	"org.glassfish.tyrus:tyrus-server" : "1.3.5", | ||||
| 	"org.glassfish.tyrus:tyrus-spi" : "1.3.5", | ||||
| 	"org.hamcrest:hamcrest-all" : "1.3", | ||||
| 	"org.hamcrest:hamcrest-core" : "1.3", | ||||
| 	"org.hamcrest:hamcrest-library" : "1.3", | ||||
| 	"org.hibernate:hibernate-core" : "5.0.11.Final", | ||||
| 	"org.hibernate:hibernate-ehcache" : "5.0.11.Final", | ||||
| 	"org.hibernate:hibernate-entitymanager" : "5.0.11.Final", | ||||
| 	"org.hibernate:hibernate-envers" : "5.0.11.Final", | ||||
| 	"org.hibernate:hibernate-java8" : "5.0.11.Final", | ||||
| 	"org.hibernate:hibernate-jpamodelgen" : "5.0.11.Final", | ||||
| 	"org.hibernate:hibernate-validator" : "5.3.4.Final", | ||||
| 	"org.hibernate:hibernate-validator-annotation-processor" : "5.3.4.Final", | ||||
| 	"org.hsqldb:hsqldb" : "2.3.3", | ||||
| 	"org.igniterealtime.smack:smack-extensions" : "4.1.9", | ||||
| 	"org.igniterealtime.smack:smack-java7" : "4.1.9", | ||||
| 	"org.igniterealtime.smack:smack-resolver-javax" : "4.1.9", | ||||
| 	"org.igniterealtime.smack:smack-tcp" : "4.1.9", | ||||
| 	"org.infinispan:infinispan-jcache" : "8.2.5.Final", | ||||
| 	"org.infinispan:infinispan-spring4-common" : "8.2.5.Final", | ||||
| 	"org.infinispan:infinispan-spring4-embedded" : "8.2.5.Final", | ||||
| 	"org.jasig.cas.client:cas-client-core" : "3.4.1", | ||||
| 	"org.javassist:javassist" : "3.21.0-GA", | ||||
| 	"org.jboss:jboss-transaction-spi" : "7.5.0.Final", | ||||
| 	"org.jboss.logging:jboss-logging" : "3.3.0.Final", | ||||
| 	"org.jboss.narayana.jta:jdbc" : "5.5.1.Final", | ||||
| 	"org.jboss.narayana.jta:jms" : "5.5.1.Final", | ||||
| 	"org.jboss.narayana.jta:jta" : "5.5.1.Final", | ||||
| 	"org.jboss.narayana.jts:narayana-jts-integration" : "5.5.1.Final", | ||||
| 	"org.jdom:jdom2" : "2.0.6", | ||||
| 	"org.jibx:jibx-run" : "1.3.1", | ||||
| 	"org.jolokia:jolokia-core" : "1.3.5", | ||||
| 	"org.jooq:jooq" : "3.9.1", | ||||
| 	"org.jooq:jooq-codegen" : "3.9.1", | ||||
| 	"org.jooq:jooq-meta" : "3.9.1", | ||||
| 	"org.jredis:jredis-core-api" : "06052013", | ||||
| 	"org.jredis:jredis-core-ri" : "06052013", | ||||
| 	"org.jruby:jruby" : "1.7.26", | ||||
| 	"org.json:json" : "20140107", | ||||
| 	"org.liquibase:liquibase-core" : "3.5.3", | ||||
| 	"org.mariadb.jdbc:mariadb-java-client" : "1.5.7", | ||||
| 	"org.mockito:mockito-core" : "1.10.19", | ||||
| 	"org.mongodb:mongo-java-driver" : "3.4.1", | ||||
| 	"org.mongodb:mongodb-driver" : "3.4.1", | ||||
| 	"org.mortbay.jasper:apache-el" : "8.0.33", | ||||
| 	"org.neo4j:neo4j-ogm-api" : "2.1.1", | ||||
| 	"org.neo4j:neo4j-ogm-compiler" : "2.1.1", | ||||
| 	"org.neo4j:neo4j-ogm-core" : "2.1.1", | ||||
| 	"org.neo4j:neo4j-ogm-http-driver" : "2.1.1", | ||||
| 	"org.objenesis:objenesis" : "2.5.1", | ||||
| 	"org.openid4java:openid4java-nodeps" : "0.9.6", | ||||
| 	"org.postgresql:postgresql" : "9.4.1212.jre7", | ||||
| 	"org.projectlombok:lombok" : "1.16.12", | ||||
| 	"org.quartz-scheduler:quartz" : "2.2.3", | ||||
| 	"org.reactivestreams:reactive-streams" : "1.0.0", | ||||
| 	"org.seleniumhq.selenium:htmlunit-driver" : "2.21", | ||||
| 	"org.seleniumhq.selenium:selenium-api" : "2.53.1", | ||||
| 	"org.seleniumhq.selenium:selenium-chrome-driver" : "2.53.1", | ||||
| 	"org.seleniumhq.selenium:selenium-firefox-driver" : "2.53.1", | ||||
| 	"org.seleniumhq.selenium:selenium-ie-driver" : "2.53.1", | ||||
| 	"org.seleniumhq.selenium:selenium-java" : "2.53.1", | ||||
| 	"org.seleniumhq.selenium:selenium-remote-driver" : "2.53.1", | ||||
| 	"org.seleniumhq.selenium:selenium-safari-driver" : "2.53.1", | ||||
| 	"org.seleniumhq.selenium:selenium-support" : "2.53.1", | ||||
| 	"org.skyscreamer:jsonassert" : "1.4.0", | ||||
| 	"org.slf4j:jcl-over-slf4j" : "1.7.22", | ||||
| 	"org.slf4j:jul-to-slf4j" : "1.7.22", | ||||
| 	"org.slf4j:log4j-over-slf4j" : "1.7.22", | ||||
| 	"org.slf4j:slf4j-api" : "1.7.22", | ||||
| 	"org.slf4j:slf4j-jdk14" : "1.7.22", | ||||
| 	"org.slf4j:slf4j-log4j12" : "1.7.22", | ||||
| 	"org.slf4j:slf4j-simple" : "1.7.22", | ||||
| 	"org.spockframework:spock-core" : "1.0-groovy-2.4", | ||||
| 	"org.spockframework:spock-spring" : "1.0-groovy-2.4", | ||||
| 	"org.springframework:spring-aop" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-aspects" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-beans" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-context" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-context-support" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-core" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-expression" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-instrument" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-instrument-tomcat" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-jdbc" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-jms" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-messaging" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-orm" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-oxm" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-test" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-tx" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-web" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-webmvc" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-webmvc-portlet" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:spring-websocket" : "4.3.6.RELEASE", | ||||
| 	"org.springframework:springloaded" : "1.2.6.RELEASE", | ||||
| 	"org.springframework.amqp:spring-amqp" : "1.7.0.RELEASE", | ||||
| 	"org.springframework.amqp:spring-rabbit" : "1.7.0.RELEASE", | ||||
| 	"org.springframework.batch:spring-batch-core" : "3.0.7.RELEASE", | ||||
| 	"org.springframework.batch:spring-batch-infrastructure" : "3.0.7.RELEASE", | ||||
| 	"org.springframework.batch:spring-batch-integration" : "3.0.7.RELEASE", | ||||
| 	"org.springframework.batch:spring-batch-test" : "3.0.7.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-actuator" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-actuator-docs" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-autoconfigure" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-autoconfigure-processor" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-configuration-metadata" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-configuration-processor" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-devtools" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-loader" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-loader-tools" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-activemq" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-actuator" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-amqp" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-aop" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-artemis" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-batch" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-cache" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-cloud-connectors" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-cassandra" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-couchbase" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-elasticsearch" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-gemfire" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-jpa" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-ldap" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-mongodb" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-neo4j" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-redis" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-rest" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-data-solr" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-freemarker" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-groovy-templates" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-hateoas" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-integration" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-jdbc" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-jersey" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-jetty" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-jooq" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-jta-atomikos" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-jta-bitronix" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-jta-narayana" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-log4j2" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-logging" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-mail" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-mobile" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-mustache" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-remote-shell" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-security" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-social-facebook" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-social-linkedin" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-social-twitter" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-test" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-thymeleaf" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-tomcat" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-undertow" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-validation" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-web" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-web-services" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-starter-websocket" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-test" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-test-autoconfigure" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.boot:spring-boot-test-support" : "1.5.1.RELEASE", | ||||
| 	"org.springframework.cloud:spring-cloud-cloudfoundry-connector" : "1.2.3.RELEASE", | ||||
| 	"org.springframework.cloud:spring-cloud-core" : "1.2.3.RELEASE", | ||||
| 	"org.springframework.cloud:spring-cloud-heroku-connector" : "1.2.3.RELEASE", | ||||
| 	"org.springframework.cloud:spring-cloud-localconfig-connector" : "1.2.3.RELEASE", | ||||
| 	"org.springframework.cloud:spring-cloud-spring-service-connector" : "1.2.3.RELEASE", | ||||
| 	"org.springframework.data:spring-cql" : "1.5.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-cassandra" : "1.5.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-commons" : "1.13.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-couchbase" : "2.2.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-elasticsearch" : "2.1.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-envers" : "1.1.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-gemfire" : "1.9.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-jpa" : "1.11.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-keyvalue" : "1.2.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-ldap" : "1.0.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-mongodb" : "1.10.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-mongodb-cross-store" : "1.10.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-mongodb-log4j" : "1.10.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-neo4j" : "4.2.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-redis" : "1.8.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-rest-core" : "2.6.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-rest-hal-browser" : "2.6.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-rest-webmvc" : "2.6.0.RELEASE", | ||||
| 	"org.springframework.data:spring-data-solr" : "2.1.0.RELEASE", | ||||
| 	"org.springframework.hateoas:spring-hateoas" : "0.23.0.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-amqp" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-core" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-event" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-feed" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-file" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-flow" : "1.0.0.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-ftp" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-gemfire" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-groovy" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-http" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-ip" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-java-dsl" : "1.2.1.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-jdbc" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-jms" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-jmx" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-jpa" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-kafka" : "2.1.0.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-mail" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-mongodb" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-mqtt" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-redis" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-rmi" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-scripting" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-security" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-sftp" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-splunk" : "1.1.0.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-stomp" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-stream" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-syslog" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-test" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-twitter" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-websocket" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-ws" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-xml" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-xmpp" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.integration:spring-integration-zookeeper" : "4.3.7.RELEASE", | ||||
| 	"org.springframework.kafka:spring-kafka" : "1.1.2.RELEASE", | ||||
| 	"org.springframework.kafka:spring-kafka-test" : "1.1.2.RELEASE", | ||||
| 	"org.springframework.ldap:spring-ldap-core" : "2.3.1.RELEASE", | ||||
| 	"org.springframework.ldap:spring-ldap-core-tiger" : "2.3.1.RELEASE", | ||||
| 	"org.springframework.ldap:spring-ldap-ldif-batch" : "2.3.1.RELEASE", | ||||
| 	"org.springframework.ldap:spring-ldap-ldif-core" : "2.3.1.RELEASE", | ||||
| 	"org.springframework.ldap:spring-ldap-odm" : "2.3.1.RELEASE", | ||||
| 	"org.springframework.ldap:spring-ldap-test" : "2.3.1.RELEASE", | ||||
| 	"org.springframework.mobile:spring-mobile-device" : "1.1.5.RELEASE", | ||||
| 	"org.springframework.plugin:spring-plugin-core" : "1.2.0.RELEASE", | ||||
| 	"org.springframework.plugin:spring-plugin-metadata" : "1.2.0.RELEASE", | ||||
| 	"org.springframework.restdocs:spring-restdocs-core" : "1.1.2.RELEASE", | ||||
| 	"org.springframework.restdocs:spring-restdocs-mockmvc" : "1.1.2.RELEASE", | ||||
| 	"org.springframework.restdocs:spring-restdocs-restassured" : "1.1.2.RELEASE", | ||||
| 	"org.springframework.retry:spring-retry" : "1.2.0.RELEASE", | ||||
| 	"org.springframework.security:spring-security-acl" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-aspects" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-cas" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-config" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-core" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-crypto" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-data" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-jwt" : "1.0.7.RELEASE", | ||||
| 	"org.springframework.security:spring-security-ldap" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-messaging" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-openid" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-remoting" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-taglibs" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-test" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security:spring-security-web" : "4.2.1.RELEASE", | ||||
| 	"org.springframework.security.oauth:spring-security-oauth" : "2.0.12.RELEASE", | ||||
| 	"org.springframework.security.oauth:spring-security-oauth2" : "2.0.12.RELEASE", | ||||
| 	"org.springframework.session:spring-session" : "1.3.0.RELEASE", | ||||
| 	"org.springframework.session:spring-session-data-gemfire" : "1.3.0.RELEASE", | ||||
| 	"org.springframework.session:spring-session-data-mongo" : "1.3.0.RELEASE", | ||||
| 	"org.springframework.session:spring-session-data-redis" : "1.3.0.RELEASE", | ||||
| 	"org.springframework.session:spring-session-hazelcast" : "1.3.0.RELEASE", | ||||
| 	"org.springframework.session:spring-session-jdbc" : "1.3.0.RELEASE", | ||||
| 	"org.springframework.shell:spring-shell" : "1.1.0.RELEASE", | ||||
| 	"org.springframework.social:spring-social-config" : "1.1.4.RELEASE", | ||||
| 	"org.springframework.social:spring-social-core" : "1.1.4.RELEASE", | ||||
| 	"org.springframework.social:spring-social-facebook" : "2.0.3.RELEASE", | ||||
| 	"org.springframework.social:spring-social-facebook-web" : "2.0.3.RELEASE", | ||||
| 	"org.springframework.social:spring-social-linkedin" : "1.0.2.RELEASE", | ||||
| 	"org.springframework.social:spring-social-security" : "1.1.4.RELEASE", | ||||
| 	"org.springframework.social:spring-social-twitter" : "1.1.2.RELEASE", | ||||
| 	"org.springframework.social:spring-social-web" : "1.1.4.RELEASE", | ||||
| 	"org.springframework.webflow:spring-binding" : "2.4.4.RELEASE", | ||||
| 	"org.springframework.webflow:spring-faces" : "2.4.4.RELEASE", | ||||
| 	"org.springframework.webflow:spring-js" : "2.4.4.RELEASE", | ||||
| 	"org.springframework.webflow:spring-js-resources" : "2.4.4.RELEASE", | ||||
| 	"org.springframework.webflow:spring-webflow" : "2.4.4.RELEASE", | ||||
| 	"org.springframework.ws:spring-ws-core" : "2.4.0.RELEASE", | ||||
| 	"org.springframework.ws:spring-ws-security" : "2.4.0.RELEASE", | ||||
| 	"org.springframework.ws:spring-ws-support" : "2.4.0.RELEASE", | ||||
| 	"org.springframework.ws:spring-ws-test" : "2.4.0.RELEASE", | ||||
| 	"org.springframework.ws:spring-xml" : "2.4.0.RELEASE", | ||||
| 	"org.testng:testng" : "6.10", | ||||
| 	"org.threeten:threetenbp" : "1.3.3", | ||||
| 	"org.thymeleaf:thymeleaf" : "2.1.5.RELEASE", | ||||
| 	"org.thymeleaf:thymeleaf-spring4" : "2.1.5.RELEASE", | ||||
| 	"org.thymeleaf.extras:thymeleaf-extras-conditionalcomments" : "2.1.2.RELEASE", | ||||
| 	"org.thymeleaf.extras:thymeleaf-extras-java8time" : "2.1.0.RELEASE", | ||||
| 	"org.thymeleaf.extras:thymeleaf-extras-springsecurity4" : "2.1.3.RELEASE", | ||||
| 	"org.webjars:bootstrap" : "2.3.2", | ||||
| 	"org.webjars:hal-browser" : "9f96c74", | ||||
| 	"org.webjars:html5shiv" : "3.7.3", | ||||
| 	"org.webjars:json-editor" : "0.7.21", | ||||
| 	"org.webjars:knockout" : "2.3.0", | ||||
| 	"org.webjars:sockjs-client" : "0.3.4", | ||||
| 	"org.webjars:stomp-websocket" : "2.3.0", | ||||
| 	"org.webjars:webjars-locator" : "0.32", | ||||
| 	"org.webjars:webjars-taglib" : "0.3", | ||||
| 	"org.xerial:sqlite-jdbc" : "3.15.1", | ||||
| 	"org.xerial.snappy:snappy-java" : "1.1.2.6", | ||||
| 	"org.xmlbeam:xmlprojector" : "1.4.9", | ||||
| 	"org.yaml:snakeyaml" : "1.17", | ||||
| 	"org.zeromq:jeromq" : "0.3.4", | ||||
| 	"redis.clients:jedis" : "2.9.0", | ||||
| 	"velocity-tools:velocity-tools-view" : "1.4", | ||||
| 	"wsdl4j:wsdl4j" : "1.6.3", | ||||
| 	"xml-apis:xml-apis" : "1.4.01", | ||||
| 	"xmlunit:xmlunit" : "1.6", | ||||
| 	"xom:xom" : "1.2.5", | ||||
| 	"org.gebish:geb-spock" : "1.1.1", | ||||
| 	"org.powermock:powermock-core" : "1.6.2", | ||||
| 	"org.powermock:powermock-api-support" : "1.6.2", | ||||
| 	"org.powermock:powermock-module-junit4-common" : "1.6.2", | ||||
| 	"org.powermock:powermock-module-junit4" : "1.6.2", | ||||
| 	"org.powermock:powermock-api-mockito" : "1.6.2", | ||||
| 	"org.powermock:powermock-reflect" : "1.6.2" | ||||
| ] | ||||
| 
 | ||||
| configurations.all { | ||||
| 	resolutionStrategy.eachDependency { DependencyResolveDetails details -> | ||||
| 		def id = "${details.requested.group}:${details.requested.name}" | ||||
| 
 | ||||
| 		if(deps[id]) { | ||||
| 			details.useVersion deps[id] | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,6 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.docs' | ||||
| 	id 'java' | ||||
| } | ||||
| 
 | ||||
| version = '1.0.0.BUILD-SNAPSHOT' | ||||
|  | @ -0,0 +1 @@ | |||
| rootProject.name = 'simple' | ||||
|  | @ -0,0 +1,3 @@ | |||
| = Example Manual | ||||
| 
 | ||||
| This will fail due to {missing} attribute | ||||
|  | @ -0,0 +1,6 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.docs' | ||||
| 	id 'java' | ||||
| } | ||||
| 
 | ||||
| version = '1.0.0.BUILD-SNAPSHOT' | ||||
|  | @ -0,0 +1 @@ | |||
| rootProject.name = 'missing-include' | ||||
|  | @ -0,0 +1,3 @@ | |||
| = Example Manual | ||||
| 
 | ||||
| This will fail due to <<missing>> cross reference | ||||
|  | @ -0,0 +1,6 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.docs' | ||||
| 	id 'java' | ||||
| } | ||||
| 
 | ||||
| version = '1.0.0.BUILD-SNAPSHOT' | ||||
|  | @ -0,0 +1 @@ | |||
| rootProject.name = 'missing-include' | ||||
|  | @ -0,0 +1,5 @@ | |||
| = Example Manual | ||||
| 
 | ||||
| This will fail due to missing include | ||||
| 
 | ||||
| include::missing.adoc[] | ||||
|  | @ -0,0 +1,13 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.docs' | ||||
| 	id 'java' | ||||
| } | ||||
| 
 | ||||
| version = '1.0.0.BUILD-SNAPSHOT' | ||||
| 
 | ||||
| asciidoctorj { | ||||
| 	attributes \ | ||||
| 		'build-gradle': project.buildFile, | ||||
| 		'sourcedir': project.sourceSets.main.java.srcDirs[0], | ||||
| 		'endpoint-url': 'https://example.org' | ||||
| } | ||||
|  | @ -0,0 +1 @@ | |||
| rootProject.name = 'simple' | ||||
|  | @ -0,0 +1 @@ | |||
| <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.js"></script> | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 120 KiB | 
|  | @ -0,0 +1,60 @@ | |||
| = Example Manual | ||||
| Doc Writer <doc.writer@example.org> | ||||
| 2014-09-09 | ||||
| :example-caption!: | ||||
| ifndef::imagesdir[:imagesdir: images] | ||||
| ifndef::sourcedir[:sourcedir: ../java] | ||||
| 
 | ||||
| This is a user manual for an example project. | ||||
| 
 | ||||
| == Introduction | ||||
| 
 | ||||
| This project does something. | ||||
| We just haven't decided what that is yet. | ||||
| 
 | ||||
| == Source Code | ||||
| 
 | ||||
| [source,java] | ||||
| .Java code from project | ||||
| ---- | ||||
| include::{sourcedir}/example/StringUtils.java[tags=contains,indent=0] | ||||
| ---- | ||||
| 
 | ||||
| This page was built by the following command: | ||||
| 
 | ||||
|  $ ./gradlew asciidoctor | ||||
| 
 | ||||
| == Images | ||||
| 
 | ||||
| [.thumb] | ||||
| image::sunset.jpg[scaledwidth=75%] | ||||
| 
 | ||||
| == Attributes | ||||
| 
 | ||||
| .Built-in | ||||
| asciidoctor-version:: {asciidoctor-version} | ||||
| safe-mode-name:: {safe-mode-name} | ||||
| docdir:: {docdir} | ||||
| docfile:: {docfile} | ||||
| imagesdir:: {imagesdir} | ||||
| revnumber:: {revnumber} | ||||
| 
 | ||||
| .Custom | ||||
| sourcedir:: {sourcedir} | ||||
| endpoint-url:: {endpoint-url} | ||||
| 
 | ||||
| == Includes | ||||
| 
 | ||||
| .include::subdir/_b.adoc[] | ||||
| ==== | ||||
| include::subdir/_b.adoc[] | ||||
| ==== | ||||
| 
 | ||||
| WARNING: Includes can be tricky! | ||||
| 
 | ||||
| == build.gradle | ||||
| 
 | ||||
| [source,groovy] | ||||
| ---- | ||||
| include::{build-gradle}[] | ||||
| ---- | ||||
|  | @ -0,0 +1,7 @@ | |||
| content from _src/docs/asciidoc/subdir/_b.adoc_. | ||||
| 
 | ||||
| .include::_c.adoc[] | ||||
| [example] | ||||
| -- | ||||
| include::_c.adoc[] | ||||
| -- | ||||
|  | @ -0,0 +1 @@ | |||
| content from _src/docs/asciidoc/subdir/c.adoc_. | ||||
|  | @ -0,0 +1,9 @@ | |||
| package example; | ||||
| 
 | ||||
| public class StringUtils { | ||||
|     // tag::contains[] | ||||
|     public boolean contains(String haystack, String needle) { | ||||
|         return haystack.contains(needle); | ||||
|     } | ||||
|     // end::contains[] | ||||
| } | ||||
|  | @ -0,0 +1,16 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.integration-test' | ||||
| } | ||||
| 
 | ||||
| apply plugin: 'java' | ||||
| apply plugin: 'groovy' | ||||
| 
 | ||||
| repositories { | ||||
| 	mavenCentral() | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
| 	testCompile 'junit:junit:4.12' | ||||
| 	testCompile 'org.spockframework:spock-core:1.0-groovy-2.4' | ||||
| 	integrationTestCompile 'org.springframework:spring-core:4.3.7.RELEASE' | ||||
| } | ||||
|  | @ -0,0 +1,31 @@ | |||
| /* | ||||
|  * Copyright 2002-2017 the original author or authors. | ||||
|  * | ||||
|  * 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 | ||||
|  * | ||||
|  * https://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. | ||||
|  */ | ||||
| package sample; | ||||
| 
 | ||||
| import org.springframework.core.Ordered; | ||||
| import spock.lang.Specification; | ||||
| 
 | ||||
| class TheTest extends Specification { | ||||
| 	def "has Ordered"() { | ||||
| 		expect: 'Loads Ordered fine' | ||||
| 		Ordered ordered = new Ordered() { | ||||
| 			@Override | ||||
| 			int getOrder() { | ||||
| 				return 0 | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,14 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.integration-test' | ||||
| } | ||||
| 
 | ||||
| apply plugin: 'java' | ||||
| 
 | ||||
| repositories { | ||||
| 	mavenCentral() | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
| 	testCompile 'junit:junit:4.12' | ||||
| 	integrationTestCompile 'org.springframework:spring-core:4.3.7.RELEASE' | ||||
| } | ||||
|  | @ -0,0 +1,16 @@ | |||
| package sample; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| import org.springframework.core.Ordered; | ||||
| 
 | ||||
| public class TheTest { | ||||
| 	@Test | ||||
| 	public void compilesAndRuns() { | ||||
| 		Ordered ordered = new Ordered() { | ||||
| 			@Override | ||||
| 			public int getOrder() { | ||||
| 				return 0; | ||||
| 			} | ||||
| 		}; | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,15 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.integration-test' | ||||
| } | ||||
| 
 | ||||
| apply plugin: 'java' | ||||
| apply plugin: 'propdeps' | ||||
| 
 | ||||
| repositories { | ||||
| 	mavenCentral() | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
| 	optional 'javax.servlet:javax.servlet-api:3.1.0' | ||||
| 	testCompile 'junit:junit:4.12' | ||||
| } | ||||
|  | @ -0,0 +1,11 @@ | |||
| package sample; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| import javax.servlet.http.HttpServletRequest; | ||||
| 
 | ||||
| public class TheTest { | ||||
| 	@Test | ||||
| 	public void compilesAndRuns() { | ||||
| 		HttpServletRequest request = null; | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,13 @@ | |||
| plugins { | ||||
| 	id 'io.spring.convention.jacoco' | ||||
| } | ||||
| 
 | ||||
| apply plugin: 'java' | ||||
| 
 | ||||
| repositories { | ||||
| 	mavenCentral() | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
| 	testCompile 'junit:junit:4.12' | ||||
| } | ||||
|  | @ -0,0 +1,11 @@ | |||
| package sample; | ||||
| 
 | ||||
| public class TheClass { | ||||
| 	public boolean doStuff(boolean b) { | ||||
| 		if(b) { | ||||
| 			return true; | ||||
| 		} else { | ||||
| 			return false; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,19 @@ | |||
| package sample; | ||||
| 
 | ||||
| import static org.junit.Assert.*; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class TheClassTest { | ||||
| 	TheClass theClass = new TheClass(); | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void doStuffWhenTrueThenTrue() { | ||||
| 		assertTrue(theClass.doStuff(true)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void doStuffWhenTrueThenFalse() { | ||||
| 		assertFalse(theClass.doStuff(false)); | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1 @@ | |||
| apply plugin: 'io.spring.convention.spring-module' | ||||
|  | @ -0,0 +1,14 @@ | |||
| package sample; | ||||
| 
 | ||||
| /** | ||||
|  * Testing this | ||||
|  * @author Rob Winch | ||||
|  * | ||||
|  */ | ||||
| public class Api { | ||||
| 
 | ||||
| 	/** | ||||
| 	 * This does stuff | ||||
| 	 */ | ||||
| 	public void doStuff() {} | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue