diff --git a/.gitignore b/.gitignore index 7059d10..9e63c0b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ build bin *.idea *.iml +lib/ vendor/ .bundle/ build/ @@ -13,7 +14,7 @@ out/ *.ipr *.iws *.gem -Gemfile.lock +*.gemspec +Gemfile* settings.gradle gradle.properties -lib/logstash-input-java_input_example_jars.rb diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3aebba5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,13 @@ +## 1.0.0 +- Updated for GA release of native support for Java plugins. Includes: + - Improved Gradle task wrappers + - Removal of auto-generated Ruby source files + +## 0.2.0 +- Updated for beta version of native support for Java plugins. Includes: + - Gradle task wrappers + - Updated plugin API + - Full feature parity with Ruby plugins + +## 0.0.1 +- Initial version for experimental v0 of native support for Java plugins. diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 80ffb42..0000000 --- a/Gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org/' - -gemspec - -logstash_path = ENV["LOGSTASH_PATH"] || "../../logstash" # <- is where travis has the source -use_logstash_source = ENV["LOGSTASH_SOURCE"] && ENV["LOGSTASH_SOURCE"].to_s == "1" - -if Dir.exist?(logstash_path) && use_logstash_source - gem 'logstash-core', :path => "#{logstash_path}/logstash-core" - gem 'logstash-core-plugin-api', :path => "#{logstash_path}/logstash-core-plugin-api" -end - diff --git a/VERSION b/VERSION index 8acdd82..3eefcb9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.1 +1.0.0 diff --git a/build.gradle b/build.gradle index 79af97d..c89dce4 100644 --- a/build.gradle +++ b/build.gradle @@ -2,15 +2,23 @@ import java.nio.file.Files import static java.nio.file.StandardCopyOption.REPLACE_EXISTING apply plugin: 'java' -apply plugin: 'idea' -apply plugin: 'maven-publish' -apply plugin: 'maven' -apply plugin: "distribution" +apply from: LOGSTASH_CORE_PATH + "/../rubyUtils.gradle" -group 'org.logstash.javaapi' -version "${file("VERSION").text.trim()}" - -description = "Example Java input implementation" +// =========================================================================== +// plugin info +// =========================================================================== +group 'org.logstashplugins' // must match the package of the main plugin class +version "${file("VERSION").text.trim()}" // read from required VERSION file +description = "Example Java input implementation" +pluginInfo.licenses = ['Apache-2.0'] // list of SPDX license IDs +pluginInfo.longDescription = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using \$LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program" +pluginInfo.authors = ['Elasticsearch'] +pluginInfo.email = ['info@elastic.co'] +pluginInfo.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html" +pluginInfo.pluginType = "input" +pluginInfo.pluginClass = "JavaInputExample" +pluginInfo.pluginName = "java_input_example" // must match the @LogstashPlugin annotation in the main plugin class +// =========================================================================== sourceCompatibility = 1.8 targetCompatibility = 1.8 @@ -50,14 +58,50 @@ dependencies { testCompile 'org.jruby:jruby-complete:9.1.13.0' } +clean { + delete "${projectDir}/Gemfile" + delete "${projectDir}/" + pluginInfo.pluginFullName() + ".gemspec" + delete "${projectDir}/lib/" + delete "${projectDir}/vendor/" + new FileNameFinder().getFileNames(projectDir.toString(), pluginInfo.pluginFullName() + "-?.?.?.gem").each { filename -> + delete filename + } +} + tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } -task vendor(dependsOn: shadowJar) << { - String vendorPathPrefix = "vendor/jar-dependencies" - String projectGroupPath = project.group.replaceAll('\\.', '/') - File projectJarFile = file("${vendorPathPrefix}/${projectGroupPath}/${project.name}/${project.version}/${project.name}-${project.version}.jar") - projectJarFile.mkdirs() - Files.copy(file("$buildDir/libs/${project.name}-${project.version}.jar").toPath(), projectJarFile.toPath(), REPLACE_EXISTING) +task vendor(dependsOn: shadowJar) { + doLast { + String vendorPathPrefix = "vendor/jar-dependencies" + String projectGroupPath = project.group.replaceAll('\\.', '/') + File projectJarFile = file("${vendorPathPrefix}/${projectGroupPath}/${pluginInfo.pluginFullName()}/${project.version}/${pluginInfo.pluginFullName()}-${project.version}.jar") + projectJarFile.mkdirs() + Files.copy(file("$buildDir/libs/${project.name}-${project.version}.jar").toPath(), projectJarFile.toPath(), REPLACE_EXISTING) + validatePluginJar(projectJarFile, project.group) + } +} + +task generateRubySupportFiles() { + doLast { + generateRubySupportFilesForPlugin(project.description, project.group, version) + } +} + +task removeObsoleteJars() { + doLast { + new FileNameFinder().getFileNames( + projectDir.toString(), + "vendor/**/" + pluginInfo.pluginFullName() + "*.jar", + "vendor/**/" + pluginInfo.pluginFullName() + "-" + version + ".jar").each { f -> + delete f + } + } +} + +task gem(dependsOn: [downloadAndInstallJRuby, removeObsoleteJars, vendor, generateRubySupportFiles]) { + doLast { + buildGem(projectDir, buildDir, pluginInfo.pluginFullName() + ".gemspec") + } } diff --git a/lib/logstash/inputs/java_input_example.rb b/lib/logstash/inputs/java_input_example.rb deleted file mode 100644 index 6cb2df0..0000000 --- a/lib/logstash/inputs/java_input_example.rb +++ /dev/null @@ -1,12 +0,0 @@ -# AUTOGENERATED BY THE GRADLE SCRIPT. DO NOT EDIT. -# encoding: utf-8 -require "logstash/inputs/base" -require "logstash/namespace" -require "logstash-input-java_input_example_jars" -require "java" - -class LogStash::Inputs::JavaInputExample < LogStash::Inputs::Base - config_name "java_input_example" - - def self.javaClass() org.logstash.javaapi.JavaInputExample.java_class; end -end diff --git a/logstash-input-java_input_example.gemspec b/logstash-input-java_input_example.gemspec deleted file mode 100644 index 6678bf9..0000000 --- a/logstash-input-java_input_example.gemspec +++ /dev/null @@ -1,25 +0,0 @@ -PLUGIN_VERSION = File.read(File.expand_path(File.join(File.dirname(__FILE__), "VERSION"))).strip unless defined?(PLUGIN_VERSION) - -Gem::Specification.new do |s| - s.name = 'logstash-input-java_input_example' - s.version = PLUGIN_VERSION - s.licenses = ['Apache-2.0'] - s.summary = "Example input using Java plugin API" - s.description = "" - s.authors = ['Elasticsearch'] - s.email = 'info@elastic.co' - s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html" - s.require_paths = ['lib', 'vendor/jar-dependencies'] - - # Files - s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"] - - # Special flag to let us know this is actually a logstash plugin - s.metadata = { 'logstash_plugin' => 'true', 'logstash_group' => 'input'} - - # Gem dependencies - s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99" - s.add_runtime_dependency 'jar-dependencies' - - s.add_development_dependency 'logstash-devutils' -end diff --git a/src/main/java/org/logstash/javaapi/JavaInputExample.java b/src/main/java/org/logstashplugins/JavaInputExample.java similarity index 99% rename from src/main/java/org/logstash/javaapi/JavaInputExample.java rename to src/main/java/org/logstashplugins/JavaInputExample.java index 5978811..404f6b5 100644 --- a/src/main/java/org/logstash/javaapi/JavaInputExample.java +++ b/src/main/java/org/logstashplugins/JavaInputExample.java @@ -1,4 +1,4 @@ -package org.logstash.javaapi; +package org.logstashplugins; import co.elastic.logstash.api.Configuration; import co.elastic.logstash.api.Context; diff --git a/src/test/java/org/logstash/javaapi/JavaInputExampleTest.java b/src/test/java/org/logstashplugins/JavaInputExampleTest.java similarity index 95% rename from src/test/java/org/logstash/javaapi/JavaInputExampleTest.java rename to src/test/java/org/logstashplugins/JavaInputExampleTest.java index 4e3a568..0a75ab5 100644 --- a/src/test/java/org/logstash/javaapi/JavaInputExampleTest.java +++ b/src/test/java/org/logstashplugins/JavaInputExampleTest.java @@ -1,10 +1,11 @@ -package org.logstash.javaapi; +package org.logstashplugins; import co.elastic.logstash.api.Configuration; import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.logstash.plugins.ConfigurationImpl; +import org.logstashplugins.JavaInputExample; import java.util.ArrayList; import java.util.HashMap;