Camunda:无法转换为(相同 class)
Camunda: cannot be cast to (same class)
我在我的 Maven 项目中包含了一个 .jar
,在 pom.xml
中编写了这个:
<dependencies>
<dependency>
<groupId>org.loopingdoge.acme.model</groupId>
<artifactId>acme-model</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/acme-model.jar</systemPath>
</dependency>
</dependencies>
acme-model.jar
包含 org.loopingdoge.acme.model.House
但此转换
public class HouseAdder implements JavaDelegate {
public void execute(DelegateExecution delegateExecution) throws Exception {
House house = (House) delegateExecution.getVariable("house");
}
}
在 Wildfly 服务器上部署时出现此错误:
18:50:20,255 ERROR [org.camunda.bpm.engine.context] (default task-45) ENGINE-16004 Exception while closing command context:
org.loopingdoge.acme.model.House cannot be cast to org.loopingdoge.acme.model.House: java.lang.ClassCastException: org.loopingdoge.acme.model.House cannot be cast to org.loopingdoge.acme.model.House
at org.loopingdoge.acme.services.HouseAdder.execute(HouseAdder.java:13)
当 class 将通过不同的 class 加载器加载时,就会发生这种情况。 java 即使 package 和 classname 相同,也要使它们不同。
您需要了解此 class 将以何种方式加载。第一步,找到包含 class.
的罐子
or/and read this on SO
我猜你在多个地方都有 class,例如在 WildFly 和您部署的 WAR 中打包 jar。检查 class 在 class 路径上是否只有一次。
顺便说一句:如果不是绝对必要,最好不要使用系统依赖项。这就是 Maven 存储库的用途。
运行成同样的问题。进一步的分析表明,使用了两个不同的 class 加载程序,如该线程中所述。在我的例子中,罪魁祸首是 spring boot 的 devtools,这个工具很可能会在他们的 pom.xml 中激活。似乎 devtools 不能很好地与(在我的情况下)camunda java 具有嵌入式 camunda 引擎的代表一起使用。
我在我的 Maven 项目中包含了一个 .jar
,在 pom.xml
中编写了这个:
<dependencies>
<dependency>
<groupId>org.loopingdoge.acme.model</groupId>
<artifactId>acme-model</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/acme-model.jar</systemPath>
</dependency>
</dependencies>
acme-model.jar
包含 org.loopingdoge.acme.model.House
但此转换
public class HouseAdder implements JavaDelegate {
public void execute(DelegateExecution delegateExecution) throws Exception {
House house = (House) delegateExecution.getVariable("house");
}
}
在 Wildfly 服务器上部署时出现此错误:
18:50:20,255 ERROR [org.camunda.bpm.engine.context] (default task-45) ENGINE-16004 Exception while closing command context: org.loopingdoge.acme.model.House cannot be cast to org.loopingdoge.acme.model.House: java.lang.ClassCastException: org.loopingdoge.acme.model.House cannot be cast to org.loopingdoge.acme.model.House at org.loopingdoge.acme.services.HouseAdder.execute(HouseAdder.java:13)
当 class 将通过不同的 class 加载器加载时,就会发生这种情况。 java 即使 package 和 classname 相同,也要使它们不同。
您需要了解此 class 将以何种方式加载。第一步,找到包含 class.
的罐子or/and read this on SO
我猜你在多个地方都有 class,例如在 WildFly 和您部署的 WAR 中打包 jar。检查 class 在 class 路径上是否只有一次。
顺便说一句:如果不是绝对必要,最好不要使用系统依赖项。这就是 Maven 存储库的用途。
运行成同样的问题。进一步的分析表明,使用了两个不同的 class 加载程序,如该线程中所述。在我的例子中,罪魁祸首是 spring boot 的 devtools,这个工具很可能会在他们的 pom.xml 中激活。似乎 devtools 不能很好地与(在我的情况下)camunda java 具有嵌入式 camunda 引擎的代表一起使用。