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

Искам да създам автоматично генериран файл с ресурси, подобен на 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: Project Properties -> Builders -> New.

Впоследствие Eclipse трябва да намери и обнови този файл сам. Ако не стане, проверете конфигурациите си: Предпочитания -> Общи -> Работно пространство -> намерете „Опресняване с използване на собствени кукички или анкета“ и подобни и ги проверете. (Имайте предвид, че не съм 100% сигурен, че тази последна част ще работи.)

Пътят на най-малкото съпротивление е тази стъпка на изграждане да се изпълнява отделно. Ако вашият файл със свойства не се променя толкова често, тогава това не би трябвало да е толкова голяма работа. Това е подобно на това, което бихте направили, ако използвате протоколни буфери, JAXB, wsdl2java и т.н. Ако искате всичко да работи магически като R.java, тогава вероятно трябва да направите нещо малко по-сложно:

- Опитайте се да използвате опциите на Eclipse Builder, за да контролирате кога се изпълнява задачата Ant - Ако не можете да разберете това, тогава бих проверил как Eclipse се свързва с горните проекти (тоест с буфери на протоколи, JAXB, wsdl2java , и т.н.) – Вижте ADT персонализирания клас PreCompilerBuilder – Вижте build-helper-plugin

person jtoberon    schedule 11.09.2012
comment
Благодаря за това. Точно от каквото имах нужда. Ще дам наградата още няколко дни, за да видя дали мога да издоя още подробности за бъдещето, но най-вероятно тя е ваша. - person ahodder; 11.09.2012
comment
Ако ant работи за вас, след като имате задачата ant, добавете builder към проекта на eclipse (свойства на проекта, builders, добавете ant). Има много опции за избор на задача и контрол кога се изпълнява. В миналото успях да настроя това така, че една директория да се следи за промени, които след това причиняват изпълнението на задачата 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