我的gradle项目会使用注解处理器在gen/main/java目录下生成一些Java代码。当我将这个项目导入Eclipse时,Eclipse不会自动将gen/main/java目录添加到构建路径中。我可以手动添加,但是否有一种自动化的方法呢?
谢谢。
谢谢。
您可以通过手动将生成的文件夹添加到类路径中来轻松实现:
eclipse {
classpath {
file.whenMerged { cp ->
cp.entries.add( new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java', null) )
}
}
}
在第二个构造函数参数为null
的情况下,Eclipse将把编译后的“class”文件放置在默认的输出文件夹中。如果你想改变这种行为,只需提供一个String
,例如'bin-gen'。
beforeMerged
中完成这个操作,否则重新运行 gradle eclipse
将会添加一个_第二个_类路径条目(Eclipse 会对此发出警告)。 - Alice Purcellbuild.gradle
文件中:sourceSets {
main {
java {
srcDirs += ["src/gen/java"]
}
}
}
.classpath
中生成以下行:<classpathentry kind="src" path="src/gen/java"/>
我已在Gradle 4.1上进行了测试,但我认为它也可以在旧版本上运行。
如果您使用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)
}
}