Использование сгенерированных исходников в проекте buildr

Я пытаюсь использовать генератор кода внутри java-проекта на основе buildr. Я хотел бы...

  • позвонить генератору
  • скомпилировать сгенерированные классы, упаковать их
  • 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 ...

так что я, очевидно, делаю что-то очень и очень неправильно. Я был бы очень рад увидеть рабочий пример или проект, использующий генерацию кода.


person alvi    schedule 17.08.2011    source источник


Ответы (2)


Наконец-то я заработал с помощью списка рассылки buildr. для всех, кто заинтересован: пример упоминается здесь содержит проблему. это:

compile.from generate

должно быть:

compile.from generate.to_s

Теперь работает красиво! buildr также автоматически расширяет .classpath для eclipse (и идею, если вы его используете), если 'compile.from' указывает на другое место.

person alvi    schedule 27.08.2011

Вы вызываете циклическую зависимость, вызывая родительский проект в своем проекте «дополнительно». В этой строке: Java.classpath ‹‹ проекты('генератор')

Возможно, вам следует поставить все на один уровень, что также показывает пример. В этом случае ваша ссылка «генерировать» также будет недоступна, поскольку она находится в области «дополнительно».

Что-то вроде этого (не проверено):

  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
person devboy    schedule 17.08.2011
comment
спасибо за вашу запись! к сожалению, это не сработало. buildr no выдает это: javac: invalid flag: /home/me/projects/gen/generator/target/generated/sources - person alvi; 17.08.2011
comment
Кстати: я мог бы обойти ошибку циклической зависимости, используя что-то вроде этого Java.classpath << 'target/classes', но я все еще далек от всего, что, кажется, работает. Это так расстраивает. - person alvi; 17.08.2011
comment
Я думаю, что devboy прав, и ошибка, которую вы видите, является последующей проблемой при запуске вашего основного метода. Вы пытались поместить несколько System.err в основной метод, чтобы увидеть, работает ли он? - person Antoine Toulme; 18.08.2011
comment
к сожалению, метод даже не вызывается. спасибо за предложение. - person alvi; 18.08.2011