我的gradle項目使用註釋處理器在gen/main/java中生成一些java代碼。當我將這個項目導入Eclipse時,Eclipse不會自動將gen/main/java作爲源文件夾添加到構建路徑中。我可以手動完成。但是有沒有辦法讓它自動化?如何將gradle生成的源文件夾添加到Eclipse項目中?
謝謝。
我的gradle項目使用註釋處理器在gen/main/java中生成一些java代碼。當我將這個項目導入Eclipse時,Eclipse不會自動將gen/main/java作爲源文件夾添加到構建路徑中。我可以手動完成。但是有沒有辦法讓它自動化?如何將gradle生成的源文件夾添加到Eclipse項目中?
謝謝。
如果您使用gradle cleanEclipse eclipse
從命令行生成Eclipse項目,Andreas的答案會有效。如果您使用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)
}
}
好吧,我明白了,但我沒有使用STS Eclipse Gradle插件,因爲它有點不穩定恕我直言。 – 2014-11-10 13:52:49
請提供鏈接到源:) [鏈接](http://blog.tamalsaha.com/post/102154319104/how-to-add-gradle-generated-source-folder-to) – Nico 2016-08-25 07:16:22
您可以輕鬆地通過手動
eclipse {
classpath {
file.whenMerged { cp ->
cp.entries.add(new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java', null))
}
}
}
由此null
作爲第二構造ARG意味着Eclipse中應該把默認的輸出文件夾中的編撰的「類」文件中添加生成的文件夾到classpath中。如果你想改變它,只需要提供String
。 「本根」。
您應該在'beforeMerged'中執行此操作,否則重新運行'gradle eclipse'會添加一個_second_類路徑條目(並且Eclipse會抱怨) – 2016-06-13 14:57:58
我認爲這是一個有點清潔只是第二源目錄添加到主源集。
添加到您的build.gradle
:
sourceSets {
main {
java {
srcDirs += ["src/gen/java"]
}
}
}
這導致你.classpath
產生以下行:
<classpathentry kind="src" path="src/gen/java"/>
我和搖籃4.1測試這一點,但我懷疑這會與舊版本一起工作。
你有更詳細的例子嗎?我可以想到爲什麼不添加源文件夾的兩個可能的原因。 1)源文件夾不是源文件夾中的模型gradle的一部分...或者2)當項目導入時,該文件夾尚不存在。無論您是在'1'還是'2'情況下,都可以採用不同的解決方案。所以,如果你能確定它會幫助什麼。嘗試這種方法的一種方法是確保您在導入之前創建文件夾(即使它是空的)。如果該文件夾現在正在添加,那麼它一定是因爲第二個原因。 – Kris 2014-11-07 18:38:11