【发布时间】: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