我偶尔会在使用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设置或构建文件有关。
不幸的是,对我的公司严格的专有信息保护政策,我有点担心在这里分享任何实际的代码或实际的蚂蚁文件,但我希望有人会有一个想法,他们可以与我分享。
答案 0 :(得分:0)
我能够通过显式复制每个作业所需的依赖项目并确保我只复制这些项目来解决这个问题。
以前,我有时会从一些具有我需要的依赖项的作业中复制所有工件。我认为在我复制的多个工作中发现依赖关系的情况下发生了一些奇怪的事情。我仍然没有弄清楚到底发生了什么,但这似乎已经解决了。