我的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