![](/img/trans.png)
[英]How do I determine which Android Gradle Plugin version is needed for my target SDK?
[英]How do I determine which version of a class my object is?
我正在尝试将插件编写到框架应用程序(Joget)中。 我的插件源看起来像这样:
public class MyPlugin extends ExtDefaultPlugin implements ApplicationPlugin, ParticipantPlugin {
...
public void execute(){
...
SecurityContextImpl secContext = (SecurityContextImpl) WorkflowUtil.getHttpServletRequest().getSession().getAttribute("SPRING_SECURITY_CONTEXT");
}
}
运行插件时,出现以下异常。
java.lang.ClassCastException: org.springframework.security.context.SecurityContextImpl cannot be cast to org.springframework.security.context.SecurityContextImpl
我正在使用Maven。 现在,由于两者具有相同的软件包名称,因此我假设我不小心在插件JAR(包含SecurityContextImpl类)中使用了错误的软件包版本,而不是在框架中使用了错误的软件包版本。 但是我仔细检查了一下,看来我在我的插件包中包括了正确的插件。
有没有办法查看类的类加载器或源JAR(例如,以某种方式使用反射)? 关于如何解决这个问题还有其他想法吗?
这种类型的java.lang.ClassCastException
,当两个或两个具有相同名称的类由两个不同的类加载器加载时,会发生两个类名称相等的情况。
我不认识Joget,但您在谈论插件。 框架通常将插件加载到单独的类加载器中,以确保它们之间的适当隔离。
既然您说我已经仔细检查过,看来我在我的插件包中包括了正确的插件。 ,您可能想从包中删除spring-security
,因为它可能已经由框架类加载器加载了。
您正在使用Maven
,因此您可以将<scope>provided</scope>
到spring-security
依赖项中(但不确定,因为我们没有您的pom.xml)。
我在运行插件时遇到了同样的异常。
也就是说,在插件的pom.xml中没有要部署的存储库(groupId,artificateId等)。 解决方法是,转到目标文件夹并打开xxx-0.0.1-snapshot.jar文件,然后打开META-INF / MANIFEST.MF,添加该类的源文件/dependency/file.jar,然后添加源jar到依赖文件夹
备注 :最好提供一个本地文件的版本,然后按pom.xml中所示添加它,以便在代码中将其作为src找到。
<!-- your source jar need to be renamed as example-1.0.0.jar -->
<dependency>
<groupId>this.should.be.the.prefix.of.your.package</groupID>
<artificateId>file.name<artificateId>
<version>1.0.0</version>
<systemPath>${basedir}/lib/stclient_updated-1.0.0.jar</systemPath>
<scope>system</scope>
</dependency>
我曾经遇到过这种类型的问题,因为存储库不正确,另请参见Maven存储库以查找源的官方存储库。
我希望它可以帮助=)
干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.