我正在使用 Eclipse Kepler Service Release 2 ,因为大约一周我遇到了 JBoss Tools Project Validator 的问题。清理项目时会出现问题。
查看日志,它看起来像一个循环依赖:
org.eclipse.jdt.internal.core.SourceType.getPackageFragment中的java.lang.StackOverflowError(SourceType.java:427) 在 org.eclipse.jdt.internal.core.NamedMember.getFullyQualifiedName(NamedMember.java:183) 在 org.eclipse.jdt.internal.core.SourceType.getFullyQualifiedName(SourceType.java:272) 在 org.eclipse.jdt.internal.core.SourceType.getFullyQualifiedName(SourceType.java:265) 在 org.jboss.tools.common.java.ParametedType.equals(ParametedType.java:161) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:380) 在 org.jboss.tools.common.java.ParametedType.areTypeParametersAssignableTo(ParametedType.java:430) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:398) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:402) 在 org.jboss.tools.common.java.ParametedType.areTypeParametersAssignableTo(ParametedType.java:430) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:398) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:402) 在 org.jboss.tools.common.java.ParametedType.areTypeParametersAssignableTo(ParametedType.java:430) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:398) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:402) 在 org.jboss.tools.common.java.ParametedType.areTypeParametersAssignableTo(ParametedType.java:430) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:398) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:402)ava.lang.StackOverflowError 在 org.eclipse.jdt.internal.core.SourceType.getPackageFragment(SourceType.java:427) 在 org.eclipse.jdt.internal.core.NamedMember.getFullyQualifiedName(NamedMember.java:183) 在 org.eclipse.jdt.internal.core.SourceType.getFullyQualifiedName(SourceType.java:272) 在 org.eclipse.jdt.internal.core.SourceType.getFullyQualifiedName(SourceType.java:265) 在 org.jboss.tools.common.java.ParametedType.equals(ParametedType.java:161) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:380) 在 org.jboss.tools.common.java.ParametedType.areTypeParametersAssignableTo(ParametedType.java:430) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:398) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:402) 在 org.jboss.tools.common.java.ParametedType.areTypeParametersAssignableTo(ParametedType.java:430) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:398) 在 org.jboss.tools.common.java.ParametedType.isAssignableTo(ParametedType.java:402)...
在日志文件的末尾:
at org.jboss.tools.cdi.internal.core.impl.CDIProject.containsType(CDIProject.java:498) 在 org.jboss.tools.cdi.internal.core.impl.CDIProject.getBeans(CDIProject.java:383) 在 org.jboss.tools.cdi.internal.core.validation.CDICoreValidator.validateInjectionPoint(CDICoreValidator.java:1805) 在 org.jboss.tools.cdi.internal.core.validation.CDICoreValidator.validateBean(CDICoreValidator.java:742) 在 org.jboss.tools.cdi.internal.core.validation.CDICoreValidator.validateResource(CDICoreValidator.java:611) 在 org.jboss.tools.cdi.internal.core.validation.CDICoreValidator.validateAll(CDICoreValidator.java:511) 在 org.jboss.tools.common.validation.ValidatorManager.validateAll(ValidatorManager.java:132) 在 org.jboss.tools.common.validation.ValidatorManager.validateInJob(ValidatorManager.java:84) 在 org.eclipse.wst.validation.internal.operations.ValidatorJob.run(ValidatorJob.java:78) 在org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
不幸的是,我在xhtml页面或Java类中找不到任何循环依赖。不知道怎么解决这个问题?
在Viacheslav Kabanovich的回复之后我才能找到某事。像这样我无法想象成为问题...在我的情况下,代码中有很多这样的星座......也不是他所说的那种组合......
@Named
public class A extends B<Y,Z> implements Serializable
{
private static final long serialVersionUID = 4283839282383928L;
@Inject
private transient C<Y,Z> c;
....
}
答案 0 :(得分:1)
我用这个假豆重现了这个问题:
public class A<V extends A.B> {
static class B extends A<V> {
}
@Inject
A<V> s2;
}
我想看看“现实生活”中的一个例子。你能否在你的代码中找到一个注入,它将一个参数类型设置为一个变量,然后在这里发布一个可赋值给它的bean类的类型声明?
无论如何,这是我们修复的错误。
11月19日新增: 我创建了问题https://issues.jboss.org/browse/JBIDE-21036并修复了我能找到的案例。 请为涉及类型参数的问题案例添加注释。这组定义应该是完整的,例如,请在您的示例中添加类型B和C的B和C声明,如果它们扩展其他类型并使用边界声明类型参数,则需要声明所有相关类型。
答案 1 :(得分:0)
尝试更新到Eclipse Mars + JBoss Tools 4.3.0。