Jenkins 构建中偶尔出现 Java 名称冲突错误

occassional javac name clash errors in Jenkins build

我偶尔会在使用 Jenkins 构建的 java 项目中遇到名称冲突错误。

我在几个地方看到过它,它都遵循以下格式:

public class Foo {
    public enum FooEnum {
        VALUE1("Val1"),
        VALUE2("Val2)

        private FooEnum(String) { /*code*/}
    }
}

错误输出会说:

 [javac] /path/Foo.java:6: error: name clash: FooEnum(String) and FooEnum(String) have the same erasure
[javac]   private FooEnum(String)
                  ^

请注意,只有一个名为 FooEnum 的方法,因此它不是类型擦除问题或类似问题的情况。该方法似乎有点自相矛盾。

我在 Eclipse 中开发代码,我的代码库跨越同一工作区中的多个 Eclipse 项目。对于我的 Jenkin 管道,我为每个 Eclipse 项目分配了一份工作。

每个项目完成后,它会归档整个项目目录(包括源文件和 .class 文件)。下游项目然后从以前的构建中复制归档对象,以便它们可以将它们用作依赖项。

我正在使用从 eclipse 自动生成的 ant build.xml 文件。

这些错误不会经常出现,但是当它们出现时,它们通常会持续几个构建然后消失。我无法找出任何模式来指示它们何时发生以及何时不发生。

我在 Eclipse 中构建时从未遇到过任何问题,所以我认为这个问题一定与我的 Jenkins 设置或构建文件有关。

不幸的是,对我公司严格的专有信息保护政策,我有点担心在这里共享任何实际代码或实际 ant 文件,但我希望有人可以与我分享他们的想法。

我能够通过显式复制每个作业所需的依赖项目并确保我只复制这些项目来解决这个问题。

以前,我有时会从一些具有我需要的依赖项的作业中复制所有工件。我认为在我复制的多个作业中发现依赖项的情况下发生了一些奇怪的事情。我仍然没有弄清楚到底发生了什么,但这似乎已经解决了。