问题描述
private Subquery<Date> latestEvent(final CriteriaQuery<?> query,final CriteriaBuilder cb,Root<Documento> superRoot){
Subquery<Date> subquery = query.subquery(Date.class);
Root<DocumentoEvent> documentoEvent = subquery.from(DocumentoEvent.class);
subquery.select(cb.greatest(documentoEvent.get(DocumentoEvent_.BPM_TASK_END_TIME)));
List<Predicate> predicateSubquery = new ArrayList<Predicate>();
predicateSubquery.add(
cb.and(
cb.isNotNull(documentoEvent.get(DocumentoEvent_.bpmtaskEndTime)),cb.equal(
documentoEvent.get(DocumentoEvent_.DOCUMENTO).get(Documento_.ID),superRoot.get(Documento_.ID))
)
);
subquery.where(predicateSubquery.toArray( new Predicate[predicateSubquery.size()]));
return subquery;
}
当我将它推送到 gitlab 时,构建在不到一分钟的时间内失败,并显示以下消息:
org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.5:compile (default-compile) on project pnp-repositories: Compilation failure/builds/ documentale-no-problem/dnp/pnp/pnp-repositories/src/main/java/it/[MASKED]/pnp/specifications/DocumentoSpecification.java:[2608,35] 接口 javax.persistence.criteria.CriteriaBuilder 中最大的方法不能应用于给定的类型;
显然该方法的第三行是导致问题的原因(即 cb.greatest())。
在推送之前,我从 eclipse 内部启动了 tomcat 上的项目,根本没有错误消息。我什至调试了它,方法的每一行都在执行,没有抛出异常或错误。
现在我知道即使项目存在构建问题,eclipse 也会启动并发布到 Tomcat(至少我遇到过这种情况),所以我想尝试并更改相同的方法以使其无法编译:
private Subquery<Date> latestEvent(final CriteriaQuery<?> query,Root<Documento> superRoot){
Subquery<Date> subquery = query.subquery(Date.class);
Root<DocumentoEvent> documentoEvent = subquery.from(DocumentoEvent.class);
subquery.select(cb.greatest(documentoEvent.get(DocumentoEvent_.BPM_TASK_END_TIME)));
List<Predicate> predicateSubquery = new ArrayList<Predicate>();
sdjfhsduifgvsdiyufgvsdyufgs hfasd
predicateSubquery.add(
cb.and(
cb.isNotNull(documentoEvent.get(DocumentoEvent_.bpmtaskEndTime)),superRoot.get(Documento_.ID))
)
);
subquery.where(predicateSubquery.toArray( new Predicate[predicateSubquery.size()]));
return subquery;
}
正如预期的那样,Tomcat 仍然开始时没有错误消息,但是当执行到达该方法时,我会收到以下错误:
org.springframework.web.util.nestedservletexception:处理程序调度失败;嵌套异常是 java.lang.Error: 未解决的编译问题: 语法错误,插入“VariableDeclarators”完成LocalVariableDeclaration 语法错误,插入“;”完成 LocalVariableDeclarationStatement rgkjxflkvj 无法解析
这意味着 Tomcat 至少获得了最新的源代码并且能够检测到错误。
那么这里发生了什么?我假设 gitlab 没有弥补错误,我可以落后于 Tomcat/Eclipse 没有检测到它(涉及 Java 泛型等等)但是为什么我能够执行每一行新代码,即使是那些显然导致 gitlab 上的构建错误?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)