2014-11-05 8 views
6

Mein grdle Projekt erzeugt etwas Java Code in gen/main/java mit Annotation Prozessor. Wenn ich dieses Projekt in Eclipse importiere, fügt Eclipse gen/main/java nicht automatisch als Quellordner zu buildpath hinzu. Ich kann es manuell machen. Aber gibt es eine Möglichkeit, dies zu automatisieren?Wie fügt man dem Eclipse-Projekt einen generierten Quellordner hinzu?

Danke.

+0

Haben Sie ein ausführlicheres Beispiel? Ich kann mir zwei mögliche Gründe vorstellen, warum der Quellordner nicht hinzugefügt wurde. 1) der Quellordner ist nicht Teil des Modellgraders Ihrer Quellordner ... oder 2) wenn das Projekt importiert wird, existiert der Ordner noch nicht. Unabhängig davon, ob Sie "1" oder "2" sind, ist möglicherweise eine andere Lösung angebracht. Also, wenn Sie herausfinden könnten, was das ist, würde helfen. Eine Möglichkeit, dies zu versuchen, besteht darin, sicherzustellen, dass Sie den Ordner (auch wenn er leer ist) vor dem Importieren erstellen. Wenn der Ordner jetzt hinzugefügt wird, muss dies am zweiten Grund liegen. – Kris

Antwort

1

Andreas Antwort funktioniert, wenn Sie Eclipse-Projekt von der Befehlszeile mit gradle cleanEclipse eclipse generieren. Wenn Sie das STS Eclipse Gradle-Plugin verwenden, müssen Sie die Aufgabe afterEclipseImport implementieren. Unten ist mein voller Arbeits Schnipsel:

project.ext { 
    genSrcDir = projectDir.absolutePath + '/gen/main/java' 
} 
compileJava { 
    options.compilerArgs += ['-s', project.genSrcDir] 
} 
compileJava.doFirst { 
    task createGenDir << { 
    ant.mkdir(dir: project.genSrcDir) 
    } 
    createGenDir.execute() 
    println 'createGenDir DONE' 
} 
eclipse.classpath.file.whenMerged { 
    classpath - > 
    def genSrc = new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java', null) 
    classpath.entries.add(genSrc) 
} 
task afterEclipseImport(description: "Post processing after project generation", group: "IDE") { 
    doLast { 
    compileJava.execute() 
    def classpath = new XmlParser().parse(file(".classpath")) 
    new Node(classpath, "classpathentry", [kind: 'src', path: 'gen/main/java']); 
    def writer = new FileWriter(file(".classpath")) 
    def printer = new XmlNodePrinter(new PrintWriter(writer)) 
    printer.setPreserveWhitespace(true) 
    printer.print(classpath) 
    } 
} 

enter image description here

+0

Ah ok, ich sehe, aber ich benutze STS Eclipse Gradle Plugin nicht als ein bisschen instabil IMHO. –

+0

Bitte geben Sie den Link zur Quelle :) [Link] (http://blog.tamalsaha.com/post/102154319104/how-to-add-gradle-generated-source-folder-to) – Nico

7

Sie können die erzeugten Ordner manuell zu dem Classpath von

eclipse { 
    classpath { 
     file.whenMerged { cp -> 
      cp.entries.add(new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java', null)) 
     } 
    } 
} 

wobei null als zweitem Konstruktor arg bedeuten einfach hinzufügen, dass Eclipse-die kompilierten „Klasse“ Dateien im Standardausgabeordner setzen sollte. Wenn Sie dies ändern möchten, geben Sie stattdessen eine String an, z. "bin-gen".

+1

Sie sollten dies in 'beforedMerged' tun, sonst wird 'gralle eclipse' einen _second_ classpath Eintrag hinzufügen (und Eclipse wird sich darüber beklagen) –

2

Ich denke, es ist ein bisschen sauberer ist nur ein zweites Quellverzeichnis in das Hauptquelle Satz hinzuzufügen.

Fügen Sie diese auf Ihre build.gradle:

sourceSets { 
    main { 
     java { 
      srcDirs += ["src/gen/java"] 
     } 
    } 
} 

Daraus ergibt sich die folgende Zeile erzeugt in Ihrem .classpath:

<classpathentry kind="src" path="src/gen/java"/> 

ich dies mit Gradle getestet habe 4.1, aber ich vermute, es würde arbeite auch mit älteren Versionen.

Verwandte Themen