2016-11-29 1 views
0

Ich erhalte gelegentlich Name Kollisionsfehler in einem Java-Projekt mit Jenkins gebaut.gelegentliche javac Name Kollisionsfehler in Jenkins Build

ich es in ein paar Orte gesehen haben, und es beide Orte es folgendes Format folgt:

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

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

Und der Fehlerausgang sagen würde:

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

Hinweis, dass es nur eine Methode mit dem Namen FooEnum, also ist es kein Fall von Typ-Löschungsproblemen oder ähnlichem. Die Methode scheint irgendwie in Konflikt mit sich selbst zu stehen.

Ich entwickle den Code in Eclipse und meine Codebasis umfasst mehrere Eclipse-Projekte im selben Arbeitsbereich. Für meine Jenkin-Pipeline habe ich einen Job für jedes Eclipse-Projekt.

Wenn jedes Projekt abgeschlossen ist, wird das gesamte Projektverzeichnis (einschließlich der Quell- und der .class-Dateien) archiviert. Downstream-Projekte kopieren dann die archivierten Objekte aus den vorherigen Builds, sodass sie sie als Abhängigkeiten verwenden können.

Ich verwende die Dateien ant build.xml, die automatisch aus Eclipse generiert werden.

Diese Fehler tauchen nicht oft auf, aber wenn sie es tun, bleiben sie normalerweise für einige Builds bestehen und verschwinden dann. Ich war nicht in der Lage, irgendein Muster herauszufinden, das anzeigt, wann sie auftreten und wann nicht.

Ich hatte nie Probleme beim Erstellen in Eclipse, also denke ich, dass das Problem mehr mit meinem Jenkins-Setup oder den Build-Dateien zu tun haben muss.

Leider zu meinen Unternehmen strengen proprietären Informationen Schutzrichtlinien, ich bin ein wenig besorgt über die Weitergabe von tatsächlichen Code oder tatsächliche Ant-Dateien hier, aber ich hatte gehofft, jemand würde eine Idee haben, die sie mit mir teilen könnten.

Antwort

0

Ich konnte das beheben, indem ich die für jeden Job erforderlichen Abhängigkeitsprojekte explizit kopierte und sicherstellte, dass ich nur in diese Projekte kopierte.

Früher habe ich manchmal alle Artefakte aus ein paar Jobs kopiert, die die Abhängigkeiten hatten, die ich brauchte. Ich denke, dass etwas Seltsames in den Fällen passiert, in denen eine Abhängigkeit in mehreren Jobs gefunden wurde, die ich kopiert habe. Ich habe immer noch nicht genau herausgefunden, was vor sich geht, aber das scheint es behoben zu haben.