Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
jvmlet opened this issue Jan 27, 2019 · 14 comments
Assignees
Labels
bug Something isn't working
Milestone

Comments

@jvmlet
Copy link

jvmlet commented Jan 27, 2019

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.
@valery1707
Copy link
Owner

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?

@valery1707 valery1707 added this to the 0.1.2 milestone Jan 28, 2019
@valery1707 valery1707 added the bug Something isn't working label Jan 28, 2019
@valery1707 valery1707 self-assigned this Jan 28, 2019
@valery1707
Copy link
Owner

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.

@jvmlet
Copy link
Author

jvmlet commented Jan 28, 2019

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'
    }
}

@jvmlet
Copy link
Author

jvmlet commented Jan 28, 2019

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")
  
    }

@valery1707
Copy link
Owner

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.

@valery1707
Copy link
Owner

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

@jvmlet
Copy link
Author

jvmlet commented Jan 29, 2019

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

@valery1707
Copy link
Owner

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

@valery1707
Copy link
Owner

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.

@valery1707
Copy link
Owner

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).

@jvmlet
Copy link
Author

jvmlet commented Jan 29, 2019

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_]*$/

@valery1707
Copy link
Owner

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

@valery1707
Copy link
Owner

Please test with version 0.1.3 (already released)

@jvmlet
Copy link
Author

jvmlet commented Jan 29, 2019

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_]*$/

@jvmlet jvmlet closed this as completed Jan 29, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants