【问题标题】:occassional javac name clash errors in Jenkins buildJenkins 构建中偶尔出现 java 名称冲突错误
【发布时间】:2016-11-29 23:10:56
【问题描述】:

我偶尔会在使用 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 项目。对于我的 Jenkins 管道,我为每个 Eclipse 项目都有一份工作。

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

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

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

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

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

【问题讨论】:

    标签: java eclipse jenkins ant enums


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      相关资源
      最近更新 更多