class cast exception when running command line
Description
Environment
linux 16.04
java 8
gradle 4.4
postgre 9.6
liquibase I took last version from master branch
Attachments
- 22 Jan 2018, 05:00 PM
is caused by
Activity
Nathan Voxland July 16, 2019 at 7:16 PM
Moving to 3.7.0 release

Steve Saliman July 14, 2018 at 8:31 PM
Version 2.0.0 of the Liquibase Gradle Plugn has been released. It now has its own classpath and should work much better when using Liquibase in Gradle projects.
Note that there are still issues with logging and console output, as discussed in https://liquibase.jira.com/browse/CORE-3220 - The --logLevel parameter appears to be completely ignored, and console output doesn't work either. There is a workaround to the console output, as described in the Gradle Plugin's README to at least get INFO output to the console as the plugin runs.

Steve Saliman June 16, 2018 at 10:49 PM
The Liquibase Gradle plugin has been updated to (hopefully) provide more classpath isolation between projects, liquibase, and Gradle itself. Builds now run with Liquibase 3.6, though logging doesn't seem to be working right - change sets are not shown in the console as Liquiabse runs as they used to be.
But for users who need Liquibase 3.6, this may be a workable solution.
There is still some clean up work that needs to be done, but the 2.0.0-SNAPSHOT release of the plugin is available for people who need to update their Liquibase version now.

Nathan Niesen May 18, 2018 at 7:16 PM
We have to exclude logback because we use log4j and you can only have one implementation on the classpath. These lines will still throw class not found exceptions if logback is not on the classpath:
org.slf4j.Logger rootLogger =
LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
if ( ch.qos.logback.classic.Logger.class.isAssignableFrom(rootLogger.getClass()) ) {
The ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME
is inherited from org.slf4j.Logger..ROOT_LOGGER_NAME
so you could replace that.
Instead of Logger.class.isAssignableFrom
you probably want something like:
try {
Class.forName("ch.qos.logback.classic.Logger");
} catch (ClassNotFoundException e) {
System.out.println("Logging cannot be configured; Logback is not on the classpath.");
return;
}
As it stands now, 3.6 is completely unusable in gradle projects. I think the priority should be changed to Blocker.
Andrea Vencato March 13, 2018 at 8:00 AM
Well, I think yours is a good solution, maybe temporary.
If the logger isn't Logback, it throws an exception it means that Liquibase doesn't work at all in this case.
This solution is better than none imho.
running liquibase with
./gradlew dropAll update
I get this error:
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':dropAll'. > org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger cannot be cast to ch.qos.logback.classic.Logger * Try: Run with --scan to get full insights. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':dropAll'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) Caused by: java.lang.ClassCastException: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger cannot be cast to ch.qos.logback.classic.Logger at liquibase.integration.commandline.Main.setupLogging(Main.java:212) at liquibase.integration.commandline.Main.run(Main.java:130) at org.liquibase.gradle.LiquibaseTask.runLiquibase(LiquibaseTask.groovy:113) at org.liquibase.gradle.LiquibaseTask$_liquibaseAction_closure1.doCall(LiquibaseTask.groovy:52) at org.liquibase.gradle.LiquibaseTask.liquibaseAction(LiquibaseTask.groovy:46) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:780) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:747) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) ... 29 more