|
@@ -19,81 +19,66 @@
|
|
|
package org.elasticsearch.gradle.plugin
|
|
|
|
|
|
import org.elasticsearch.gradle.ElasticsearchProperties
|
|
|
-import org.gradle.api.DefaultTask
|
|
|
import org.gradle.api.InvalidUserDataException
|
|
|
-import org.gradle.api.tasks.OutputFile
|
|
|
-import org.gradle.api.tasks.TaskAction
|
|
|
+import org.gradle.api.Task
|
|
|
+import org.gradle.api.tasks.Copy
|
|
|
|
|
|
/**
|
|
|
* Creates a plugin descriptor.
|
|
|
- *
|
|
|
- * TODO: copy the example properties file to plugin documentation
|
|
|
*/
|
|
|
-class PluginPropertiesTask extends DefaultTask {
|
|
|
+class PluginPropertiesTask extends Copy {
|
|
|
|
|
|
PluginPropertiesExtension extension
|
|
|
- Map<String, String> properties = new HashMap<>()
|
|
|
- File generatedResourcesDir = new File(project.projectDir, "generated-resources")
|
|
|
+ File generatedResourcesDir = new File(project.projectDir, 'generated-resources')
|
|
|
|
|
|
PluginPropertiesTask() {
|
|
|
+ File templateFile = new File(project.buildDir, 'templates/plugin-descriptor.properties')
|
|
|
+ Task copyPluginPropertiesTemplate = project.tasks.create('copyPluginPropertiesTemplate') {
|
|
|
+ doLast {
|
|
|
+ InputStream resourceTemplate = PluginPropertiesTask.getResourceAsStream('/plugin-descriptor.properties')
|
|
|
+ templateFile.parentFile.mkdirs()
|
|
|
+ templateFile.setText(resourceTemplate.getText('UTF-8'), 'UTF-8')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dependsOn(copyPluginPropertiesTemplate)
|
|
|
extension = project.extensions.create('esplugin', PluginPropertiesExtension, project)
|
|
|
project.clean {
|
|
|
delete generatedResourcesDir
|
|
|
}
|
|
|
project.afterEvaluate {
|
|
|
+ // check require properties are set
|
|
|
if (extension.description == null) {
|
|
|
throw new InvalidUserDataException('description is a required setting for esplugin')
|
|
|
}
|
|
|
if (extension.jvm && extension.classname == null) {
|
|
|
throw new InvalidUserDataException('classname is a required setting for esplugin with jvm=true')
|
|
|
}
|
|
|
- if (extension.jvm) {
|
|
|
- dependsOn(project.classes) // so we can check for the classname
|
|
|
- }
|
|
|
- fillProperties()
|
|
|
configure {
|
|
|
- inputs.properties(properties)
|
|
|
+ doFirst {
|
|
|
+ if (extension.jvm && extension.isolated == false) {
|
|
|
+ String warning = "WARNING: Disabling plugin isolation in ${project.name} is deprecated and will be removed in the future"
|
|
|
+ logger.warn("${'=' * warning.length()}\n${warning}\n${'=' * warning.length()}")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // configure property substitution
|
|
|
+ from templateFile
|
|
|
+ into generatedResourcesDir
|
|
|
+ expand(generateSubstitutions())
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @OutputFile
|
|
|
- File propertiesFile = new File(generatedResourcesDir, "plugin-descriptor.properties")
|
|
|
-
|
|
|
- void fillProperties() {
|
|
|
- // TODO: need to copy the templated plugin-descriptor with a dependent task, since copy requires a file (not uri)
|
|
|
- properties = [
|
|
|
+ Map generateSubstitutions() {
|
|
|
+ return [
|
|
|
'name': extension.name,
|
|
|
'description': extension.description,
|
|
|
'version': extension.version,
|
|
|
- 'elasticsearch.version': ElasticsearchProperties.version,
|
|
|
+ 'elasticsearchVersion': ElasticsearchProperties.version,
|
|
|
+ 'javaVersion': project.targetCompatibility as String,
|
|
|
'jvm': extension.jvm as String,
|
|
|
- 'site': extension.site as String
|
|
|
+ 'site': extension.site as String,
|
|
|
+ 'isolated': extension.isolated as String,
|
|
|
+ 'classname': extension.jvm ? extension.classname : 'NA'
|
|
|
]
|
|
|
- if (extension.jvm) {
|
|
|
- properties['classname'] = extension.classname
|
|
|
- properties['isolated'] = extension.isolated as String
|
|
|
- properties['java.version'] = project.targetCompatibility as String
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @TaskAction
|
|
|
- void buildProperties() {
|
|
|
- if (extension.jvm) {
|
|
|
- File classesDir = project.sourceSets.main.output.classesDir
|
|
|
- File classFile = new File(classesDir, extension.classname.replace('.', File.separator) + '.class')
|
|
|
- if (classFile.exists() == false) {
|
|
|
- throw new InvalidUserDataException('classname ' + extension.classname + ' does not exist')
|
|
|
- }
|
|
|
- if (extension.isolated == false) {
|
|
|
- logger.warn('Disabling isolation is deprecated and will be removed in the future')
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- Properties props = new Properties()
|
|
|
- for (Map.Entry<String, String> prop : properties) {
|
|
|
- props.put(prop.getKey(), prop.getValue())
|
|
|
- }
|
|
|
- props.store(propertiesFile.newWriter(), null)
|
|
|
}
|
|
|
}
|