JacORB: изменение префикса и суффикса

Я хотел бы изменить префикс и суффикс пакета в моей сборке ant при создании java из idl. Это должно быть универсальное решение! Идея звучит так:

У меня есть файлы idl (ONE.idl, TWO.idl) с пространством имен ONE_cb в первом и TWO_cb во втором (поскольку для совместимости с C++ требуется суффикс _cb). TWO_cb имеет атрибуты из ONE_cb, ONE_cb имеет только базовые типы. Я хочу изменить это на пакеты вида com.example.ONE и com.example.TWO.

Я использую JacORB 3.6. и я не знаю, как это сделать.
Мой код выглядит так:

<target name="idlj-generate">
<idl2java
   srcdir="${psm.dir}/${project}/"
   destdir="${build.generated.dir}"
   includepath="${psm.dir}"
   all="true">
      <define key="__JACORB_GENERATE__"/>
      <i2jpackage names=":com.example"/>
      <i2jpackage names="_cb:"/>
</idl2java>
</target>

Это не работает. Как я уже говорил, это должно быть универсальное решение. добавление

<i2jpackage names="TWO_cb:TWO"/> //option 2
<i2jpackage names="ONE_cb:ONE"/> //option 2b

неприемлемо

Спасибо за ваше время.


person Kage    schedule 23.02.2015    source источник


Ответы (2)


Если я правильно вас понял, у вас есть что-то вроде

module ONE_cb
{
...
}

но ты хочешь, чтобы это было

com.example.ONE { ... }

Это возможно с i2jpackage, например.

idl -forceOverwrite -d /tmp/generated -i2jpackage ONE_cb:com.example.ONE myfile.idl

Проблема в том, что вы компилируете оба файла одновременно. Удалите «все» и попробуйте скомпилировать их в два этапа.

Если вы используете Maven, я бы также порекомендовал попробовать org.codehaus.mojo:idlj-maven-plugin, поскольку с ним вы можете очень легко выполнять несколько запусков.

Чтобы использовать несколько пакетов i2jpackage, с которыми я работал

idl -forceOverwrite -d /tmp/generated -all -i2jpackagefile /tmp/file antBugJac608-2.idl

(где antBugJac608-2 # включает antBugJac608).

person Nick Cross    schedule 23.02.2015
comment
Это не помогает мне. Во-первых, я не использую maven. Во-вторых, как я уже говорил дважды: мне нужно универсальное решение - явное изменение имен очевидно. Третье и самое главное: компиляция в два этапа правильно сгенерирует ОДИН (поскольку он имеет только базовые типы), но компиляция ДВУХ без ОДНОГО вызовет ошибку, так как ДВА имеет атрибуты из ОДНОГО, т.е. ONE_cb::structA a; и первый сгенерированный файл уже не ONE_cb, а com.example.ONE - person Kage; 24.02.2015
comment
Я отредактировал свой ответ, включив в него несколько пакетов i2jpackage. Я считаю, что задача Ant также поддерживает i2jpackagefile (file=xxx), поэтому вы можете попробовать это. - person Nick Cross; 24.02.2015
comment
Спасибо за ваше время - на этот и предыдущий вопрос - но на этот раз это мне не помогло: 1. Я обнаружил, что универсальное решение невозможно в jacORB. Мне нужно знать все имена и изменить их через i2jpackage. 2. Как я уже говорил ранее - удаление всех флагов не приведет к компиляции моих исходных файлов, так как они лежат в разных папках и генерируются в другую папку. Netherless спасибо за ваше время - person Kage; 26.02.2015
comment
В моем измененном комментарии (см. команду внизу) я сохранил флаг «все» - person Nick Cross; 26.02.2015

Для различных исследований я пришел к выводу, что универсальное решение невозможно. Единственный способ изменить префикс и суффикс одновременно - это указать все включенные имена.

person Kage    schedule 26.02.2015
comment
Если бы вы могли предоставить полный тестовый пример в JacORB Bugzilla, я мог бы изучить его. - person Nick Cross; 26.02.2015