簡體   English   中英

Java(Eclipse) - 條件編譯

[英]Java (Eclipse) - Conditional compilation

我有一個java項目,在j2me項目和android項目中引用。 在這個項目中,我想使用條件編譯。

就像是...

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

//if j2me
...
//#endif

我一直在讀這個,但我還沒有找到任何有用的東西。

您可以使用Antenna (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平台構建一個...

無論如何,我希望它有幫助:)

也許您應該考慮圍繞特定於配置文件的邏輯創建接口(J2ME,Android或其他未來)。 然后為每個配置文件創建接口的具體實現。 您可以將任何公共部分拆分為抽象基類,以便擴展兩個實現。 這樣,每個配置文件的邏輯可以很好地分離,以適應不同的問題。 對於每個配置文件,只需構建適當的類集(例如,您可以通過包將它們分開)。 從長遠來看,維護,調試,測試和理解會更容易。

Eclipse的MTJ項目提供預處理支持, 記錄 這種支持主要針對解決JavaME上的碎片問題。 我沒有使用Android工具測試預處理支持,但它可能正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM