2016-11-29 79 views
0

我偶尔会在用Jenkins构建的java项目中出现名称冲突错误。在Jenkins构建的偶尔javac名称冲突错误

我见过一对夫妇的地方,它也遵循以下格式两个地方:

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

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

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