Java (Eclipse) - условная компиляция - PullRequest
4 голосов
/ 23 марта 2011

У меня есть проект Java, на который ссылаются в проекте j2me и в проекте Android.В этом проекте я хотел бы использовать условную компиляцию.

Что-то вроде ...

//#if android
...
//#endif

//if j2me
...
//#endif

Я читал об этом, но пока не нашел ничего полезного.

Ответы [ 3 ]

8 голосов
/ 23 марта 2011

Вы можете использовать Антенна (есть плагин для Eclipse, и вы можете использовать его с системой сборки Ant).Я использую его в своих проектах способом, который вы описали, и он отлично работает:)

РЕДАКТИРОВАТЬ: вот пример, связанный с решением @ WhiteFang34, который является подходящим способом:

В вашем основном проекте:

//base class Base.java
public abstract class Base {
    public static Base getInstance() 
    {
        //#ifdef ANDROID
        return new AndroidBaseImpl();
        //#elif J2ME
        return new J2MEBaseImpl();
        //#endif
    }

    public abstract void doSomething();
}

//Android specific implementation AndroidBaseImpl.java
//#ifdef ANDROID
public class AndroidBaseImpl extends Base {
    public void doSomething() {
     //Android code
    }
}
//#endif

//J2ME specific implementation J2MEBaseImpl.java
//#ifdef J2ME
public class J2MEBaseImpl extends Base {
    public void doSomething() {
        // J2Me code
    }
}
//#endif

В вашем проекте, который использует основной проект:

public class App {

    public void something {
        // Depends on the preprocessor symbol you used to build a project
        Base.getInstance().doSomething();
    }
}

Чем, если вы хотитесборка для Android, вы просто определяете ANDROID символ препроцессора или J2ME , если хотите сделать сборку для платформы J2ME ...

В любом случае, я надеюсьпомогает:)

5 голосов
/ 23 марта 2011

Возможно, вам следует подумать о создании интерфейсов на основе логики, специфичной для профиля (J2ME, Android или другой в будущем). Затем создайте конкретные реализации вашего интерфейса для каждого профиля. Любые общие части, которые вы можете разделить на абстрактный базовый класс для расширения обеих реализаций. Таким образом, ваша логика для каждого профиля красиво разделена для разных задач. Для каждого профиля просто создайте соответствующий набор классов (например, вы можете разделить их по пакетам). В дальнейшем будет проще поддерживать, отлаживать, тестировать и понимать.

0 голосов
/ 23 марта 2011

Eclipse Проект MTJ обеспечивает поддержку предварительной обработки, как задокументировано . Эта поддержка была в основном предназначена для решения проблем фрагментации в JavaME. Я не тестировал поддержку предварительной обработки вместе с инструментами Android, но она может просто работать.

...