Avoid to copy Logstash's classes into the uber jar

Open
#17 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
38/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
java
Domain
build-system

Research direction

Start in build.gradle, especially the LOGSTASH_CORE_PATH dependency and jar packaging configuration. Run ./gradlew jar, then inspect build/libs/logstash-input-java_input_example-1.0.2.jar with jar tf; done means the uber jar no longer contains org/logstash classes.

Written by the indexing model from the issue text.

Description

bug

Logstash information:

Please include the following information:

  1. Logstash version (e.g. bin/logstash --version) 8.4.0
  2. Logstash installation source (e.g. built from source, with a package manager: DEB/RPM, expanded from tar or zip archive, docker)
  3. How is Logstash being run (e.g. as a service/service manager: systemd, upstart, etc. Via command line, docker/kubernetes)
  4. How was the Logstash Plugin installed

JVM (e.g. java -version):

If the affected version of Logstash is 7.9 (or earlier), or if it is NOT using the bundled JDK or using the 'no-jdk' version in 7.10 (or higher), please provide the following information:

  1. JVM version (java -version) (bundled)
  2. JVM installation source (e.g. from the Operating System's package manager, from source, etc).
  3. Value of the JAVA_HOME environment variable if set.

OS version (uname -a if on a Unix-like system):

Description of the problem including expected versus actual behavior:
The uber jar (and the gem) created contains also the Logstash classes. This could create weird problems when loaded inside a runtime Logstash, because the classloader could load a class from this jar and not from the runtime Logstash creating weird linkage errors.

Steps to reproduce:

  1. Build the jar with ./gradlew jar, eventually fixing the build.gradle with:
diff --git a/build.gradle b/build.gradle
index 5f54ad3..4a85c25 100644
--- a/build.gradle
+++ b/build.gradle
@@ -49,7 +49,7 @@ dependencies {
    compileOnly 'org.apache.logging.log4j:log4j-api:2.17.0' // provided by Logstash
    compileOnly 'org.apache.logging.log4j:log4j-core:2.17.0' // provided by Logstash
 
-    implementation fileTree(dir: LOGSTASH_CORE_PATH, include: "**/logstash-core.jar")
+    implementation fileTree(dir: LOGSTASH_CORE_PATH, include: "**/lib/jars/logstash-core.jar")

    testImplementation 'junit:junit:4.12'
    testImplementation 'org.jruby:jruby-complete:9.2.20.1'

  1. verify that the created jar contains classes from Logstash:
$ jar tf ./build/libs/logstash-input-java_input_example-1.0.2.jar
META-INF/
META-INF/MANIFEST.MF
org/
org/logstashplugins/
org/logstashplugins/JavaInputExample.class
org/logstash/
org/logstash/JavaVersionUtils.class
org/logstash/Rubyfier.class
org/logstash/Valuefier$Converter.class
org/logstash/FieldReference$IllegalSyntaxException.class
org/logstash/Timestamp.class
org/logstash/Javafier.class
org/logstash/execution/
org/logstash/execution/ConvergeResultExt$FailedActionExt.class
org/logstash/execution/QueueBatch.class
org/logstash/execution/PipelineReporterExt$SnapshotExt.class
Dominant language
Java
Stars
8
Forks
18
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from logstash-plugins/logstash-input-java_input_example

All issues in logstash-plugins/logstash-input-java_input_example

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.