即使 eclipse 和 tomcat 没有给我任何错误,Gitlab java 构建也会失败

问题描述

我将此方法添加到我的 java maven 项目中

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 (将#修改为@)