valery1707 / kaitai-gradle-plugin

Gradle plugin for Kaitai: declarative language to generate binary data parsers

Home Page:https://kaitai.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

apache.commons.io version collision with the one used by spring-boot-gradle-plugin

jvmlet opened this issue · comments

Hi

Looks like apache.commons.io you are using contradicts with version that spring boot plugin uses.
Here is my gradle.build;

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE")
        classpath("name.valery1707.kaitai:kaitai-gradle-plugin:0.1.1")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'name.valery1707.kaitai'

When I run kaitai task with buggy ksy I get this :

Caused by: java.lang.NoSuchMethodError: org.apache.commons.io.output.ByteArrayOutputStream.toString(Ljava/nio/charset/Charset;)Ljava/lang/String;
        at name.valery1707.kaitai.KaitaiGenerator.execute(KaitaiGenerator.java:224)
        at name.valery1707.kaitai.KaitaiGenerator.generate(KaitaiGenerator.java:265)
        at name.valery1707.kaitai.KaitaiGenerator$generate$4.call(Unknown Source)
        at name.valery1707.kaitai.GenerateTask.action(GenerateTask.groovy:111)
  • You can consider to repackage your dependencies with your unique package name.

I trying to reproduce your's problem in https://gist.github.com/valery1707/65e14e9dcab89460859c339a4793db8d, but I can't to receive such message and successfully receiver original message.

I think that repacking dependencies inside my maven plugin is not good idea.

In next version I will refuse to use the problematic method.

But will be good if I can reproduce problem in tests or local project to to make sure the problem is completely gone.
Can you create minimal gradle project in which your's problem is reproduced?

I can reproduce this problem if downgrade commons-io from 2.5 (released at 2016-04-22) to 2.4 (released at 2012-06-13) I don't think that org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE released at 2018-11-30 really use such old version of commons-io library.

Here are additional classpath dependencies (were defined in root project, forgot to add them)

classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+"
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.7'

Can you please try to reproduce with this config :

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE")
        classpath("name.valery1707.kaitai:kaitai-gradle-plugin:0.1.1")
       classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
       classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+"
       classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.7'
    }
}

Not sure if the order is important :

dependencies {
     classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
       classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+"
       classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.7'
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE")
        classpath("name.valery1707.kaitai:kaitai-gradle-plugin:0.1.1")
  
    }

No, problem is not reproduced with this dependencies.
But I already released new version on kaitai-maven-plugin which don't use method from commons-io@2.5 and soon will release new version of kaitai-gradle-plugin.

Version 0.1.2 was released - please test does it works for you

Doesn't work, with buggy ksy I'm getting
Stderr unavailable as it has been consumed by user provided stream.

Can you show full error? And run gradle with --stacktrace?

Because of issue kaitai-io/kaitai_struct#509, the process launcher org.buildobjects.process.Proc will never receive the message text from stderror - it is written in stdout, at least in version 0.8.
I extracting this message manually and show it in the message of upper level exception.

After switch from showing raw error text to use machine-readable error log I will have to use stdout anyway (as I see in JavaMain.scala#263).

The full stack trace :

C:\XXXX>gradlew -S kaitai
> Task :parsers:cfb-parser:kaitai FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':parsers:cfb-parser:kaitai'.
> name.valery1707.kaitai.KaitaiException: Fail to generate Java files

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':parsers:cfb-parser:kaitai'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:96)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:65)
        at org.gradle.api.internal.tasks.execution.ActionEventFiringTaskExecuter.execute(ActionEventFiringTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.TimeoutTaskExecuter.execute(TimeoutTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.SnapshotAfterExecutionTaskExecuter.execute(SnapshotAfterExecutionTaskExecuter.java:38)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:49)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:61)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:49)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:44)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:337)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:325)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:318)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:304)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.gradle.internal.UncheckedException: name.valery1707.kaitai.KaitaiException: Fail to generate Java files
        at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:66)
        at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:76)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:48)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:704)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:671)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:117)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:106)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:85)
        ... 38 more
Caused by: name.valery1707.kaitai.KaitaiException: Fail to generate Java files
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
        at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:257)
        at name.valery1707.kaitai.GenerateTask.action(GenerateTask.groovy:119)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        ... 51 more
Caused by: name.valery1707.kaitai.KaitaiException: Fail to execute kaitai command: /meta/id: invalid meta ID: 'Connectioninfo3270', expected /^[a-z][a-z0-9_]*$/
        at name.valery1707.kaitai.KaitaiGenerator.execute(KaitaiGenerator.java:225)
        at name.valery1707.kaitai.KaitaiGenerator.generate(KaitaiGenerator.java:265)
        at name.valery1707.kaitai.KaitaiGenerator$generate$4.call(Unknown Source)
        at name.valery1707.kaitai.GenerateTask.action(GenerateTask.groovy:111)
        ... 56 more
Caused by: org.buildobjects.process.ExternalProcessFailureException: External process 'C:\XXXXXX\build\tmp\kaitai-cache\kaitai-struct-compiler-0.8\kaitai-struct-compiler-0.8\bin\kaitai-struct-compiler.bat
--target java --outdir C:\XXXX\build\generated\kaitai --java-package xxx.xxx.xxx.xxx.xxx C:\XXXXX\3270.ksy C:\XXXX
b-parser\src\main\resources\kaitai\connectioninfo3270.ksy' returned 2 after 1441ms
Stderr unavailable as it has been consumed by user provided stream.
        at org.buildobjects.process.Proc.<init>(Proc.java:124)
        at org.buildobjects.process.ProcBuilder.run(ProcBuilder.java:205)
        at name.valery1707.kaitai.KaitaiGenerator.execute(KaitaiGenerator.java:220)
        ... 59 more


* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

Without -S switch I get

* What went wrong:
Execution failed for task ':parsers:cfb-parser:kaitai'.
> name.valery1707.kaitai.KaitaiException: Fail to generate Java files

I would expect to see the real cause :

Fail to execute kaitai command: /meta/id: invalid meta ID: 'Connectioninfo3270', expected /^[a-z][a-z0-9_]*$/

Thanks for the log.
I will try to minimize intermediate errors so that without a -S option, a clear message is displayed immediately.

Please test with version 0.1.3 (already released)

Great, thanks a lot

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':parsers:cfb-parser:kaitai'.
> name.valery1707.kaitai.KaitaiException: Fail to execute kaitai command: /meta/id: invalid meta ID: 'Connectioninfo', expected /^[a-z][a-z0-9_]*$/