Gradle 2.3: ANTLR Panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt'

One of our projects’ build is failing with Gradle-2.3. It looks like the antlr plugin doesn’t behave as before. I read about the incremental antlr task feature in Gradle-2.3, but we never call the ‘execute’ method directly. So my guess is that something’s wrong with Gradle.

Unfortunately, I’m not familiar with antlr, so my investigation abilities are limited :wink:

Here are the antlr-related parts of our build.gradle - nothing fancy:

apply plugin: 'antlr'
  ext.antlrVersion = '2.7.7'
  dependencies {
    antlr (group: 'antlr', name: 'antlr', version: antlrVersion)
    runtime (group: 'antlr', name: 'antlr', version: antlrVersion)
}

The grammar files are at src/main/antlr.

And here’s the build output with stacktrace enabled:

d:\my-project>gradle assemble --stacktrace
:my-project:generateGrammarSource
warning: grammar file must be last; ignoring other arguments...
panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt'
:my-project:generateGrammarSource FAILED
  FAILURE: Build failed with an exception.
  * What went wrong:
Execution failed for task ':my-project:generateGrammarSource'.
> There was 1 error during grammar generation
   > ANTLR Panic: panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt'
  * Try:
Run with --info or --debug option to get more log output.
  * Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':my-project:generateGrammarSource'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:306)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: org.gradle.api.plugins.antlr.internal.AntlrSourceGenerationException: There was 1 error during grammar generation
        at org.gradle.api.plugins.antlr.AntlrTask.evaluateAntlrResult(AntlrTask.java:205)
        at org.gradle.api.plugins.antlr.AntlrTask.execute(AntlrTask.java:199)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:235)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:222)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 44 more
Caused by: java.lang.RuntimeException: ANTLR Panic: panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt'
        at antlr.Utils.error(Utils.java:34)
        at antlr.Tool.fatalError(Tool.java:445)
        at antlr.Tool.panic(Tool.java:466)
        at antlr.ImportVocabTokenManager.<init>(ImportVocabTokenManager.java:39)
        at antlr.DefineGrammarSymbols.endOptions(DefineGrammarSymbols.java:318)
        at antlr.ANTLRParser.treeParserSpec(ANTLRParser.java:618)
        at antlr.ANTLRParser.classDef(ANTLRParser.java:332)
        at antlr.ANTLRParser.grammar(ANTLRParser.java:173)
        at antlr.Tool.doEverything(Tool.java:244)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.plugins.antlr.internal.AntlrExecuter.processV2(AntlrExecuter.java:94)
        at org.gradle.api.plugins.antlr.internal.AntlrExecuter.runAntlr(AntlrExecuter.java:61)
        at org.gradle.api.plugins.antlr.internal.AntlrWorkerServer.execute(AntlrWorkerServer.java:48)
        at org.gradle.api.plugins.antlr.internal.AntlrWorkerServer.execute(AntlrWorkerServer.java:38)
        at org.gradle.api.plugins.antlr.internal.AntlrWorkerServer.execute(AntlrWorkerServer.java:27)
        at org.gradle.process.internal.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:78)
        at org.gradle.process.internal.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:35)
        at org.gradle.process.internal.child.ImplementationClassLoaderWorker.execute(ImplementationClassLoaderWorker.java:85)
        at org.gradle.process.internal.child.ImplementationClassLoaderWorker.execute(ImplementationClassLoaderWorker.java:41)
        at org.gradle.process.internal.child.IsolatedApplicationClassLoaderWorker.call(IsolatedApplicationClassLoaderWorker.java:48)
        at org.gradle.process.internal.child.IsolatedApplicationClassLoaderWorker.call(IsolatedApplicationClassLoaderWorker.java:30)
        at org.gradle.process.internal.launcher.GradleWorkerMain.run(GradleWorkerMain.java:32)
        at org.gradle.process.internal.launcher.GradleWorkerMain.main(GradleWorkerMain.java:37)
  BUILD FAILED

I can’t find the mentioned “ConfigurationTokenTypes.txt” anywhere in our project, even with fulltext search. I guess this must be some antlr internals? Again: With Gradle < 2.3, everything worked well.

Hope this helps finding the issue…

I can’t find any references to that file in Gradle or the Antlr sources. Are you doing any configuration at the task level on generateGrammarSource? How many files are in your src/main/antlr directory?

Can you try adding this to see if it changes anything?

generateGrammarSource {
    outputs.upToDateWhen { false }
}

Hmm, so I guess that filename is being built somewhere :confused:

We don’t do any configuration at the task level, the task isn’t even mentioned in the gradle file - only the “apply plugin” and antlr dependencies posted above.

We have about 5-6 ‘*.g’ files in ‘src/main/antlr’.

I’ll be back in the office next week, I’ll keep you posted about the up-to-date suggestion!

I think if you have a Configuration.g it’ll create a ConfigurationTokenTypes.txt as an output, which makes your problem weirder.

Hey @netmikey, have you been able to recreate this?

Hi Sterling,

Sorry for the late reply. I just added the ‘upToDateWhen’ snippet from above, but it doesn’t change anything. I looked into our *.g files to try finding where that ConfigurationTokenTypes came from: Among others, we have a ‘someconfig.g’, a ‘concreteconfig1.tree.g’ and ‘concreteconfig2.tree.g’.

‘someconfig.g’ contains:

options {
   ...
   exportVocab = Configuration;
}

while both concrete configs contain:

options {
   importVocab = Configuration;
   ....
}

Hope this helps?

Hey, is there any chance you can create a small reproducible build that shows the error so I can dig a bit deeper into it? You mention that this is failing with 2.3. So you’re saying your antlr stuff worked with 2.2?

cheers, René

@rene 2.3 had big changes to the ANTLR stuff that should be backwards compatible.

Hi Rene,

Yes, this worked with 2.2 and started failing with 2.3.

I managed to make something reproducible… I’m still novice at antlr, so don’t expect this example to compile all the way through, I just took our antlr sources and stripped down everything I could while keeping it reproducible. So don’t run ‘assemble’ on it, just ‘gradle clean generateGrammarSource’ with Gradle 2.2 vs 2.3 should show the issue.

Here’s the project: https://drive.google.com/open?id=0B6hxwnTm7cjyT3hZX19aRzByUXc&authuser=0

Hope this helps…

best regards, mike

I have raised GRADLE-3262 for that. I think the problem is that not all grammar files got compiled. Working on a fix

Hey Mike, I’ve pushed a fix for this on master. Could you give a latest nightly from http://gradle.org/nightly a try and verify your problem is fixed?

cheers, René

Hi René,

Great! From what I can tell, it looks like the current Gradle nightly ‘2.4-20150317230018+0000’ solves the problem in our build.

Thanks! :slight_smile:

Best regards, Mike

excellent! thanks for letting us know