Как я могу создать автоматически сгенерированное перечисление из файла ресурсов?

Я хочу создать автоматически сгенерированный файл ресурсов, похожий на R из android. Я знаю, как выполнить синтаксический анализ и создание файла и, по сути, создать новый файл класса. Я не знаю, как это сделать, так это запустить процесс автогенерации.

Итак, используя eclipse (хотя, если есть способ сделать это независимым образом, я бы предпочел его), как я могу запустить сеанс автогенерации для чтения файла свойств и создания файла .java, содержащего статические переменные и "ключи" из этого проанализированного файла, на которые я могу ссылаться из моего кода?


person ahodder    schedule 07.09.2012    source источник
comment
Если вам нужен только способ запустить генерацию после изменения ресурса (файла .properties), вы можете использовать ant-builder, который вызывает ваш генератор. Щелкните правой кнопкой мыши на Project - ›Properties -› Builder - ›New   -  person Andreas    schedule 11.09.2012


Ответы (2)


Несколько примеров того, как создавать исходные файлы java , уже были предоставлены . Прочитать файл свойств и вызвать один из этих API должно быть относительно легко.

Чтобы запустить процесс генерации кода, вам нужно добавить настраиваемый шаг сборки. В Ant просто добавьте настраиваемую задачу. А затем подключите его к Eclipse Builder: Свойства проекта -> Строители -> Создать.

Впоследствии Eclipse должен самостоятельно найти и обновить этот файл. Если это не так, проверьте свои конфигурации: «Настройки» -> «Общие» -> «Рабочая область» -> найдите «Обновить с помощью собственных хуков или опросов» и аналогичные и проверьте их. (Обратите внимание, что я не уверен на 100%, что эта последняя часть сработает.)

Путь наименьшего сопротивления - запустить этот этап сборки отдельно. Если ваш файл свойств не меняется так часто, это не должно иметь большого значения. Это похоже на то, что вы бы сделали, если бы вы использовали протокол буферов, JAXB, wsdl2java и т. Д. Если вы хотите, чтобы все работало волшебным образом, как это делает R.java, то вам, вероятно, придется сделать что-то более сложное:

- Попробуйте использовать параметры Eclipse Builder для управления выполнением задачи Ant - Если вы не можете этого понять, то я бы посмотрел, как Eclipse подключается к вышеуказанным проектам (то есть к буферам протокола, JAXB, wsdl2java и т. д.) - Посмотрите на настраиваемый класс ADT PreCompilerBuilder - Ознакомьтесь с плагин-помощник по сборке

person jtoberon    schedule 11.09.2012
comment
Спасибо за это. Именно то, что мне нужно. Я дам награду еще несколько дней, чтобы посмотреть, смогу ли я выдоить еще несколько деталей на будущее, но, скорее всего, это ваше. - person ahodder; 11.09.2012
comment
Если муравей работает на вас, то, как только у вас будет задача муравья, добавьте конструктор в проект eclipse (свойства проекта, построители, добавьте муравейник). Существует множество вариантов выбора задачи и управления ее выполнением. Раньше мне удавалось настроить это так, чтобы один каталог отслеживался на предмет изменений, которые затем вызывали запуск задачи ant (выполнял jsmin автоматически). - person philwb; 12.09.2012
comment
Вы правы, похоже, я забыл включить информацию о Eclipse Builders. Я добавил его выше для полноты картины. - person jtoberon; 12.09.2012

Обычно используется ResourceBundle для создания объекта, который позволяет вам искать свойства по ключу. Вы можете узнать о ResourceBundle в Java Trail.

Основная идея состоит в том, что у вас есть текстовый файл с расширением .properties. Вы указываете объект ResourceBundle на этот файл. Затем вы можете использовать метод getString() или getObject(), передав ключ нужному свойству. Вот и все. Вам просто нужно загрузить ResourceBundle при запуске программы (или когда-то раньше, чем она вам понадобится).

Если вы создаете собственный класс, который имеет ResourceBundle в качестве значения элемента, вы можете использовать простой фрагмент кода, подобный этому, чтобы иметь простой метод get() для получения значения свойства:

    public String get(String aString)
    {        
    String sVal = null;

    try
    {
        sVal = (String)myProperties.getObject(aString);
    }
    catch (MissingResourceException e)
    {
        log.debug("Missing Property Value: "+aString);
    }

    return sVal;
    }

Надеюсь, это будет полезно.

person Ruminator    schedule 07.09.2012
comment
Спасибо, но не то, что я ищу. Я ищу последний класс, не являющийся экземпляром, который будет автоматически сгенерирован, чтобы содержать ключи из файла ресурсов, который я затем могу автоматически создать файл .java. - person ahodder; 08.09.2012
comment
Извините, я, должно быть, немного подскочил, когда увидел, что вы хотите прочитать из файла свойств. Лучше всего это сделать с помощью ResourceBundle. - person Ruminator; 09.09.2012