我正在尝试在基于buildr的java项目中使用代码生成器。我想...
我花了很多时间在谷歌上搜索一个完整的例子,但无济于事。这里的示例:https://cwiki.apache.org/confluence/display/BUILDR/How+to+generate+sources+before+compilation
给出了很多错误。这就是我尝试过的:
define 'generator' do
compile.with ALL_COMMON_MODULES
end
define 'extras' do
p 'calling generator..'
Java.classpath << ALL_COMMON_MODULES
Java.classpath << projects('generator')
Java.org.foo.generator.Main.main(['../modules/daos', 'target/generated-sources'])
sources = FileList[_("src/main/jeannie/*.*")]
generate = file(_("target/generated-sources") => sources).to_s do |dir|
puts 'generating...'
mkdir_p dir.to_s # ensure directory is created
end
compile.from generate
end
给我一个错误:
RuntimeError: Circular dependency detected: TOP ...
所以我显然做了一件非常错误的事情。我很高兴看到一个使用代码生成的工作示例或项目。
答案 0 :(得分:1)
我终于得到了buildr邮件列表的帮助。对于任何感兴趣的人:提到的示例here包含一个问题。这样:
compile.from generate
应该是:
compile.from generate.to_s
现在效果很好!如果'compile.from'指向另一个位置,buildr还会自动扩展eclipse的.classpath(以及想法,以防你使用它)。
答案 1 :(得分:0)
通过调用'extras'项目中的父项目,可以产生循环依赖。 在那一行:Java.classpath&lt;&lt;项目( '发生器')
也许你应该将所有内容放在同一级别上,这也是示例所示。 在这种情况下,您的“生成”引用将无法使用,因为它位于“额外”范围内。
像这样(未经测试):
define "generator" do
generate = file(_("target/generated-sources") => sources).to_s do |dir|
p 'calling generator..'
Java.classpath << ALL_COMMON_MODULES
Java.classpath << projects('generator')
Java.org.foo.generator.Main.main(['../modules/daos', 'target/generated-sources'])
sources = FileList[_("src/main/jeannie/*.*")]
puts 'generating...'
mkdir_p dir.to_s # ensure directory is created
end
compile.with ALL
compile.from generate
end