1

ビルダーベースのJavaプロジェクト内でコードジェネレーターを使用しようとしています。私はしたいと思います...

  • ジェネレーターを呼び出す
  • 生成されたクラスをコンパイルし、パッケージ化します
  • 生成されたものを確認するためのEclipse(つまり、.classpathにこれらのソースが含まれている)

私は完全な例を探すために多くの時間を費やしてきましたが、役に立ちませんでした。ここでの例: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 ...

だから私は明らかに非常に間違ったことをしている。コード生成を使用する実用的な例やプロジェクトを見てとてもうれしいです。

4

2 に答える 2

1

私はついにビルダーのメーリングリストの助けを借りてそれを動作させました。興味のある方へ:ここで説明した例には問題が含まれています。これ:

compile.from generate

する必要があります:

compile.from generate.to_s

今では美しく動作します!また、buildrは、'compile.from'が別の場所を指している場合、eclipse(およびそれを使用する場合はアイデア)の.classpathを自動的に拡張します。

于 2011-08-27T15:10:30.330 に答える
0

'extras'プロジェクトで親プロジェクトを呼び出すことにより、循環依存を引き起こします。その行で:Java.classpath << projects('generator')

たぶん、すべてを同じレベルに置く必要があります。これは、例が示していることでもあります。このシナリオでは、「extras」スコープにあるため、「生成」参照も使用できません。

このようなもの(テストされていない):

  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
于 2011-08-17T13:37:48.720 に答える