2014-11-05 2 views
6

Мой проект gradle генерирует некоторый код Java внутри gen/main/java с использованием процессора аннотаций. Когда я импортирую этот проект в Eclipse, Eclipse автоматически не добавит gen/main/java в качестве исходной папки для buildpath. Я могу сделать это вручную. Но есть ли способ автоматизировать это?Как добавить исходную папку, сгенерированную градием, в проект Eclipse?

Спасибо.

+0

У вас есть более подробный пример? Я могу представить две возможные причины, по которым исходная папка не добавляется. 1) исходная папка не входит в модельный град из ваших исходных папок ... или 2) когда проект импортируется, папка еще не существует. Независимо от того, находитесь ли вы в случае «1» или «2», может быть другое решение. Поэтому, если бы вы могли определить, что именно это поможет. Один из способов попробовать это - убедиться, что вы создали папку (даже если она пуста) перед импортом. Если папка теперь добавляется, то это должно быть из-за второй причины. – Kris

ответ

1

Ответ Андреаса работает, если вы создаете проект Eclipse из командной строки, используя gradle cleanEclipse eclipse. Если вы используете плагин STS Eclipse Gradle, вам нужно выполнить задачу afterEclipseImport. Ниже мой полный рабочий фрагмент кода:

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

А, ок, я вижу, но я не использую плагин STS Eclipse Gradle, поскольку он немного нестабильной ИМХО. –

+0

укажите ссылку на источник :) [ссылка] (http://blog.tamalsaha.com/post/102154319104/how-to-add-gradle-generated-source-folder-to) – Nico

7

Вы можете легко добавить сгенерированную папку вручную пути к классам по

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

посредством null в качестве второго конструктора арга означает, что Eclipse, следует поместить скомпилированные файлы «класс» в папке вывода по умолчанию. Если вы хотите изменить это, просто укажите вместо этого String, например. «Бен-ген».

+1

Вы должны сделать это в 'beforeMerged', так как в противном случае reverunning 'gradle eclipse' добавит запись класса_second_ classpath (и Eclipse будет жаловаться на это) –

2

Я думаю, что это немного чище просто добавить второй исходный каталог к ​​основному набору источника.

Добавьте это в build.gradle:

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

Это приводит к следующей строке генерируемой в вашем .classpath:

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

Я проверил это с Gradle 4.1, но я подозреваю, что бы работайте и с более старыми версиями.